【发布时间】:2013-10-25 18:24:18
【问题描述】:
我无法根据嵌入式 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
}
我需要做的是找到具有SongFeedback 的StationHistoryEntries 以及给定的userId 和feedbackType=STAR。
我尝试了以下方法,但是当其他 SongFeedback 属性(由于我无法控制它们的值而未显示在代码 sn-p 中的属性)不是 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
有什么想法吗?谢谢!
【问题讨论】:
标签: java mongodb mongodb-query morphia