【发布时间】:2017-03-06 14:48:24
【问题描述】:
我在使用 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() 才能通过。但管道仍然没有返回任何内容。
我必须通过人来查询这个!!!
这可能吗?没有例子!!!
【问题讨论】:
-
有可能。您可以从您尝试查询的每个集合中添加文档吗?
-
人员 :[{_id : ... ,name : ...}] ; person_ownerships : [{_id : ..., p : DBRef("persons", ObjectId("...")), books : [ DBRef("books", ObjectId("...")) , DBRef("书籍", ObjectId("...")) , ...]} ] ;书籍:[ {_id:...,标题:“...”}]
-
books : [ {_id : ... , title : "..."} , ...] 我们是否总是要out把它放入一个新的收藏中?如果是这样,并发请求会发生什么?我也尝试 aggr.unwind("ownership.books"); 但仍然得到不正确的结果
-
你的类应该是 Pascal 大小写的,而不是你这里的小写。
标签: java mongodb aggregation-framework lookup morphia