Как в mongodb найти документ с точным совпадение по части массива?

В 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 используются мощные запросы и агрегационный фреймворк, которые предоставляют более гибкие и точные возможности поиска. В приведенных примерах описаны базовые возможности, которые могут быть полезными при работе с частью массива.