Mongodb: как использовать оператор или ($or) в запросах
Вы можете использовать оператор $or в MongoDB для поиска документов, соответствующих любому из нескольких критериев.
Этот оператор использует следующий базовый синтаксис:
db.myCollection.find({ “ $or ”: [ {" field1 ": " hello "}, {" field2 ": { $gte : 10 }} ] })
В этом конкретном примере выполняется поиск всех документов в коллекции с именем myCollection , где поле1 равно «привет» или поле2 имеет значение, большее или равное 10.
Следующие примеры показывают, как использовать этот синтаксис на практике с командой по сбору коллекций со следующими документами:
db.teams.insertOne({team: " Mavs ", points: 30, rebounds: 8}) db.teams.insertOne({team: " Mavs ", points: 35, rebounds: 12}) db.teams.insertOne({team: " Spurs ", points: 20, rebounds: 7}) db.teams.insertOne({team: " Spurs ", points: 25, rebounds: 5}) db.teams.insertOne({team: " Spurs ", points: 23, rebounds: 9})
Пример 1. Использование оператора OR с двумя полями
Следующий код показывает, как найти все документы в коллекции команд , где поле «команда» равно «Шпорам» или значение поля «очки» больше или равно 31:
db.teams.find({ “ $or ”: [ {" team ": " Spurs "}, {" points ": { $gte : 31 }} ] })
Этот запрос возвращает следующие документы:
{ _id: ObjectId("62018750fd435937399d6b6f"), team: 'Mavs', points: 35, rebounds: 12 } { _id: ObjectId("62018750fd435937399d6b70"), team: 'Spurs', points: 20, rebounds: 7 } { _id: ObjectId("62018750fd435937399d6b71"), team: 'Spurs', points: 25, rebounds: 5 } { _id: ObjectId("62018750fd435937399d6b72"), team: 'Spurs', points: 23, rebounds: 9 }
Обратите внимание, что каждый выходной документ содержит слово «Шпоры» в поле команды или значение, большее или равное 31, в поле очков.
Пример 2: использование оператора OR с более чем двумя полями
В следующем коде показано, как найти все документы в коллекции команд , где поле «команда» равно «Mavs» , или значение поля «очки» больше или равно 25 , или значение поля «отскоки». меньше 8:
db.teams.find({ “ $or ”: [ {" team ": " Mavs "}, {" points ": { $gte : 25 }}, {" rebounds ": { $lt : 8 }} ] })
Этот запрос возвращает следующий документ:
{ _id: ObjectId("62018750fd435937399d6b6e"), team: 'Mavs', points: 30, rebounds: 8 } { _id: ObjectId("62018750fd435937399d6b6f"), team: 'Mavs', points: 35, rebounds: 12 } { _id: ObjectId("62018750fd435937399d6b70"), team: 'Spurs', points: 20, rebounds: 7 } { _id: ObjectId("62018750fd435937399d6b71"), team: 'Spurs', points: 25, rebounds: 5 }
Обратите внимание, что каждый из этих документов соответствует одному или нескольким из трех критериев:
- Поле «команда» равно « Мавс ».
- Поле «баллы» имеет значение больше или равное 25.
- Поле «отскоки» имеет значение меньше 8 .
Примечание . Полную документацию по функции $or можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в MongoDB:
MongoDB: как использовать оператор AND в запросах
MongoDB: как проверить, содержит ли поле строку
MongoDB: как использовать запрос «NO IN»
MongoDB: как искать «не ноль» в определенном поле