У меня есть коллекция mongodb с массивом объектов. Я хочу иметь возможность искать объекты в массиве в любом порядке и возвращать совпадение, только если все объекты в этом массиве найдены.
Моя коллекция:
{
"_id" : ObjectId("5234c367354kj63c9cae4fec"),
"field1" : "TEST",
"created" : <DATE_HERE>,
"field2" : [
{
"index" : "A",
"value" : "1"
},
{
"index" : "B",
"value" : "2"
},
{
"index" : "C",
"value" : "3"
}
],
}
Если я предоставлю запрос ниже, приведенный выше документ будет возвращен, поскольку все 3 объекта приведены в том порядке, в котором они хранятся.
db.collection("collection").find({field1: "TEST", field2: [{"index": "A", "value": "1"}, {"index": "B", "value": "2"}, {"index": "C", "value": "3"}]})
Тем не менее, я хочу иметь возможность найти документ выше, учитывая 3 объекта в любом порядке. Например, приведенный ниже запрос:
db.collection("collection").find({field1: "TEST", field2: [{"index": "B", "value": "2"}, {"index": "A", "value": "1"}, {"index": "A", "value": "1"}]})
Я знаю, что приведенный выше запрос не будет работать, если он вообще возможен, и в нем отсутствует правильный синтаксис / функция поиска, но он просто объясняет мой мыслительный процесс и что Я пытаюсь достичь.
Я пытался использовать поиск $in
с чем-то вроде field2: {$in: [<3_objects_above>]}
, но он не даст мне точного соответствия. Например, если в этой коллекции есть 2-й документ с field2: [...{"index": "Z", "value": "543"}]
, и он содержит только 1 из 3 объектов, показанных в 2 запросах и таблице выше, этот 2-й документ также будет возвращен, поскольку он соответствует как минимум 1 предоставленному объекту. в массиве, хотя я не предоставил объект {"index": "Z", "value": "543"}
.
Есть ли способ выполнить sh предоставление объектов в массиве в любом порядке и найти документ в коллекции, который соответствует всем 3 объектам, независимо от того, в каком порядке они указаны? Совпадения все 3, а не 3 ?