У меня есть документы с четырьмя полями: A, B, C, D Теперь мне нужно найти документы, в которых по меньшей мере три поля совпадают. Например:Выбор данных из MongoDB, где выполняются критерии K из N
запрос: A = A, B = B, C = C, D = 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, но я считаю, что это не имеет значения. Мой текущий код:
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");