【问题标题】:Filter Embedded Array in Morphia在 Morphia 中过滤嵌入式阵列
【发布时间】:2014-12-31 18:11:57
【问题描述】:

我有这些课程:

@Entity
public class Event implements Serializable {

private static final long serialVersionUID = 1L;

@Id
private ObjectId id;

...

@Embedded
private List<Edition> editions;

...
}

public class Edition implements Serializable {

private static final long serialVersionUID = 1L;

private int number;

...
}

我正在尝试搜索事件并按特定版本号进行过滤。

例如,如果我有这样的集合:

{
  id : <ObjectID>,
  editions : [
    {number : 1},
    {number : 2}
  ]
}

按第 1 版搜索,我期望的结果是:

{
  id : <ObjectID>,
  editions : [
    {number : 1}
  ]
}

我在 morphia 中阅读了有关过滤器的信息,我的查询是这样的:

Query<Event> query = this.basicDAO.createQuery();
query = query.filter("editions.number", <edition number>);

return this.basicDAO.find(query).asList();

但是我仍然得到两个版本元素。我做错了什么?

【问题讨论】:

    标签: java mongodb mongodb-java morphia


    【解决方案1】:

    默认情况下,您将始终获得完整的文档。你可以ignore specific fields(支持白名单和黑名单)和.retrievedFields(false, "foo")

    您也许可以使用projection operator 来检索您要查找的值。试试这样的:

    query.filter("editions.number", <edition number>).retrievedFields(true, "editions.$");    
    

    【讨论】:

    • 非常感谢@xeraa,我在其他查询中使用了retrieveedFields,但是我没有意识到在这种情况下过滤器必须使用retrieveedFields
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多