我无法根据嵌入式 Java 集合的字段值查询 MongoDB 文档。
我有以下实体:
@Entity
public class StationHistoryEntry // extends ...
{
@Embedded
private Set<SongFeedback> songFeedback = new HashSet<SongFeedback>();
// ...
}
以及以下嵌入式类:
@Embedded
public class SongFeedback // extends ...
{
@Embedded
private FeedbackType feedbackType;
private ObjectId userId;
public enum FeedbackType {
THUMBS_UP, THUMBS_DOWN, STAR;
}
// other properties
}
我需要做的是找到StationHistoryEntries
给SongFeedback
定的userId
和feedbackType=STAR
。
我尝试了以下方法,但是当其他SongFeedback
属性(代码片段中未显示的属性,因为我无法控制它们的值)不是时没有成功null
,这在生产中发生:
public List<StationHistoryEntry> findStarredByUserId(ObjectId userId) {
SongFeedback songFeedback = new SongFeedback(FeedbackType.STAR, userId);
return ds.find(StationHistoryEntry.class)
.filter("songFeedback elem", songFeedback).asList();
}
而且我还尝试了以下方法,但它总是返回一个空列表:
public List<StationHistoryEntry> findStarredByUserId(ObjectId userId) {
Query<StationHistoryEntry> query = ds.createQuery(StationHistoryEntry.class);
query.and(
query.criteria("songFeedback.userId").equal(userId),
query.criteria("songFeedback.feedbackType").equal(FeedbackType.STAR));
return query.asList();
}
如果它有帮助,我已经创建了一个带有精简代码和单元测试的 Github 存储库:https ://github.com/gabrielcs/MorphiaQueryStackOverflow
有任何想法吗?谢谢!