В MongoDB есть несколько способов найти документ с точным совпадением по части массива. Рассмотрим несколько вариантов примеров.
1. Использование оператора $elemMatch
:
db.collection.find({ arrayField: { $elemMatch: { $eq: "value" } } })
В данном примере collection
- это имя коллекции, а arrayField
- это имя поля, содержащего массив. Запрос с использованием $elemMatch
возвращает документы, в которых хотя бы один элемент массива точно совпадает со значением "value". Если вам нужно найти все документы, в которых массив содержит несколько значений, вы можете использовать несколько операторов $elemMatch
.
Например, если вы ищете документы, в которых в массиве arrayField
есть "value1" и "value2", можно использовать следующую конструкцию:
db.collection.find({ $and: [ { arrayField: { $elemMatch: { $eq: "value1" } } }, { arrayField: { $elemMatch: { $eq: "value2" } } } ] })
2. Использование оператора $all
:
db.collection.find({ arrayField: { $all: ["value1", "value2"] } })
В этом случае оператор $all
возвращает документы, в которых все значения из массива arrayField
точно совпадают с элементами массива ["value1", "value2"]
.
3. Использование оператора $in
и агрегационного фреймворка:
db.collection.aggregate([ { $match: { arrayField: { $in: ["value1", "value2"] } } }, { $project: { matchedElements: { $setIntersection: ["$arrayField", ["value1", "value2"]] } } }, { $match: { matchedElements: { $size: 2 } } } ])
Этот запрос сначала фильтрует документы, в которых хотя бы одно из значений массива arrayField
совпадает с одним из значений массива ["value1", "value2"]
. Затем он проецирует только совпадающие элементы массивов, используя оператор $setIntersection
. Затем он фильтрует документы, в которых количество совпадающих элементов равно 2, чтобы убедиться, что совпадение точное.
Хотелось бы отметить, что при поиске в MongoDB используются мощные запросы и агрегационный фреймворк, которые предоставляют более гибкие и точные возможности поиска. В приведенных примерах описаны базовые возможности, которые могут быть полезными при работе с частью массива.