2017-03-06 83 views
0

我有一个查找问题使用Morphia。 这里是我的代码:Mongorphb Morphia聚合查找匹配

class person{ 
private ObjectId id; 
private String name; 
} 

class book{ 
private ObjectId id; 
private String title; 
} 

class person_ownership{ 
private ObjectId id; 
private person p; 
private List<book> books; 
} 

List<book> BOOKs = new ArrayList<book>(); 

什么,我想是通过搜索对个人征收与藏书

这里的ID过滤是我聚集管道

AggregationPipeline aggr = DS.createAggregation(person.class); 
aggr.lookup("person_ownership", "id", "p.id", "ownership"); 
aggr.unwind("ownership"); 

Query<person> q = DS.createQuery(person.class); 
q.disableValidation().criteria("ownership.books").in(BOOKs); 
aggr.match(q); 

Iterator<person> aggregate = aggr.aggregate(person.class, opts); 

我不得不q.disableValidation()它通过。但管道仍然没有返回。

而我必须通过throu人查询!

是甚至可能的?那里没有例外!

+0

这是可能的。你可以添加你试图查询的每个集合中的文档吗? – Veeram

+0

人:[{_ id:...,name:...}]; person_ownerships:[{_id:...,p:DBRef(“persons”,ObjectId(“...”)),books:[DBRef(“books”,ObjectId(“...”)),DBRef (“books”,ObjectId(“...”)),...]}]; books:[{_id:...,title:“...”}] –

+0

books:[{_id:...,title:“...”},...] 我们总是有把**放到一个新的集合? 如果是这样的话,会出现什么情况并发请求? 我试图** aggr.unwind(“ownership.books”); **但仍然得到不正确的结果 –

回答

0

看起来像这样是不可能的! Morphia不查找参考字段。 我不得不inste另一个字段引用人员ID为聚合工作!