在Morphia中过滤嵌入式数组

时间:2014-12-31 18:11:57

标签: java mongodb mongodb-java morphia

我有这些课程:

@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();

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

1 个答案:

答案 0 :(得分:1)

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

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

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