【问题标题】:Mongodb Morphia aggregation lookup matchMongodb Morphia 聚合查找匹配
【发布时间】: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


【解决方案1】:

似乎这是不可能的! Morphia 不查找参考字段。 我必须插入另一个引用人员 ID 的字段才能使聚合起作用!!!

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 1970-01-01
    • 2022-06-16
    • 2023-02-25
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多