Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Morphia中的滤波器嵌入阵列_Java_Mongodb_Mongodb Java_Morphia - Fatal编程技术网

Java Morphia中的滤波器嵌入阵列

Java Morphia中的滤波器嵌入阵列,java,mongodb,mongodb-java,morphia,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; ... } 我正在尝试搜索事件并按特定版本号进行筛选 例如,如果我有这样一个集合: { id : <Ob

我有这些课程:

@Entity
public class Event implements Serializable {

private static final long serialVersionUID = 1L;

@Id
private ObjectId id;

...

@Embedded
private List<Edition> editions;

...
}
我正在尝试搜索事件并按特定版本号进行筛选

例如,如果我有这样一个集合:

{
  id : <ObjectID>,
  editions : [
    {number : 1},
    {number : 2}
  ]
}
{
id:,
版本:[
{编号:1},
{编号:2}
]
}
按第1版搜索,我期望的结果是:

{
  id : <ObjectID>,
  editions : [
    {number : 1}
  ]
}
{
id:,
版本:[
{编号:1}
]
}
我在morphia中读到有关筛选器的信息,我的查询如下:

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

return this.basicDAO.find(query).asList();
query.filter("editions.number", <edition number>).retrievedFields(true, "editions.$");    
Query Query=this.basicDAO.createQuery();
query=query.filter(“editions.number”,);
返回此.basicDAO.find(query.asList();

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

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

您可能可以使用来检索正在查找的值。试着这样做:

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

return this.basicDAO.find(query).asList();
query.filter("editions.number", <edition number>).retrievedFields(true, "editions.$");    
query.filter(“editions.number”,).retrievedFields(true,“editions.$”);

非常感谢@xeraa,我在其他查询中使用了retrievedFields,但我没有意识到在这种情况下过滤器必须使用retrievedFields