0

我无法根据嵌入式 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
}

我需要做的是找到StationHistoryEntriesSongFeedback定的userIdfeedbackType=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

有任何想法吗?谢谢!

4

1 回答 1

0

尝试这个

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").in(FeedbackType.STAR));
    return query.asList();
}
于 2013-10-25T19:28:46.187 回答