【发布时间】:2017-02-03 23:58:03
【问题描述】:
我有四个字段的文档:A、B、C、D 现在我需要找到至少三个字段匹配的文档。例如:
查询:A=a, B=b, C=c, D=d
退回的文件:
- a,b,c,d(四人中的四人相遇)
- a,b,c(四人中的三人相遇)
- a,b,d(四人中的另外三人相遇)
- a,c,d(四人中的另外三人相遇)
- b,c,d(四人中的另外三人相遇)
到目前为止,我创建了类似的东西:
`(A=a AND B=b AND C=c)
OR (A=a AND B=b AND D=d)
OR (A=a AND C=c AND D=d)
OR (B=b AND C=c AND D=d)`
但这很丑陋且容易出错。
有没有更好的方法来实现它?此外,查询性能也很重要。
我正在使用 Spring Data,但我相信这没关系。我当前的代码:
Criteria c = new Criteria();
Criteria ca = Criteria.where("A").is(doc.getA());
Criteria cb = Criteria.where("B").is(doc.getB());
Criteria cc = Criteria.where("C").is(doc.getC());
Criteria cd = Criteria.where("D").is(doc.getD());
c.orOperator(
new Criteria().andOperator(ca,cb,cc),
new Criteria().andOperator(ca,cb,cd),
new Criteria().andOperator(ca,cc,cd),
new Criteria().andOperator(cb,cc,cd)
);
Query query = new Query(c);
return operations.find(query, Document.class, "documents");
【问题讨论】:
标签: mongodb mongodb-query spring-data-mongodb mongodb-java