我有四個字段的文檔:A,B,C,D現在我需要找到至少有三個字段匹配的文檔。例如:從MongoDB中選擇滿足N個條件的K個數據
查詢:A = A,B = B,C = C,d = d
返回的文檔:
- A,B,C,d(4四滿足)
- 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");