MongoDB Поиск всех значений в массиве - PullRequest
2 голосов
/ 17 июня 2020

Учитывая массив значений, мне нужно выполнить поиск в коллекции MongoDB и вернуть объединенные результаты, не выполняя несколько вызовов поиска в базе данных. Я хотел бы сделать один вызов базы данных и получить объединенные результаты

Это то, что я сейчас делаю (не совсем, но похоже):

searchArray = ["hi", "bye"]
for item in searchedArray:
    db.collection.find({"Field": item})

Проблема с этим что я не могу объединить результаты, возвращаемые каждым вызовом .find. Этот подход также делает несколько .find обращений к базе данных (по одному для каждого элемента в searchchedArray). Я хотел бы сделать один вызов и получить обратно все объединенные результаты.

Есть ли способ сделать что-то подобное, но с каждым элементом данного массива и получить обратно все объединенные результаты:

searchedArray = ["hi", "bye"]
results = db.collection.find({"Field": 'hi'} and {"Field": 'bye'})

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Если вы хотите получить документы, в которых есть все элементы из входного массива, вам нужно использовать оператор $ all .

db.collection.find( { Field: { $all: [ 'hi' , 'bye'] } } ) // input array :: [ 'hi' , 'bye']

Выше соответствует документам, в которых поле с именем Field имеет оба значения переданы во входном массиве.

Тест: mongoplayground

Но если вы хотите получить документы, даже если хотя бы один элемент из ввода совпадение массива, тогда вам нужно использовать оператор $ in .

db.collection.find( { Field: { $in: [ 'hi' , 'bye'] } } )

Тест: mongoplayground

0 голосов
/ 17 июня 2020

Обратитесь к оператору $ в . Пример

db.collection.find( { field: { $in: [ 'hi' , 'value'] } } )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...