Глава 3: MongoDB - Условный запрос
В этой главе рассматривается условный запрос в MongoDB, который аналогичен операторам сравнения, таким как равно, больше и меньше, в операторах SQL.
Условные операторы, поддерживаемые MongoDB
Оператор | Описание |
---|---|
$eq | Равно, аналогично оператору = в SQL |
$gt | Больше чем, аналогично оператору > в SQL |
$gte | Больше или равно, аналогично оператору >= в SQL |
$in | Соответствует массиву, любому значению, аналогично запросу in в SQL |
$lt | Меньше чем, аналогично оператору < в SQL |
$nin | Не соответствует ни одному значению в массиве, аналогично оператору not in в SQL |
Тестовые данные
Данные коллекции inventory представлены ниже
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
$eq (Равно)
db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )
// Можно сократить, можно игнорировать оператор $eq, qty = 20
db.inventory.find( { qty: 20 } )
Эквивалент SQL:
select * from inventory where qty = 20
// Это всего лишь пример, SQL не поддерживает формат вложенных полей, подобный item.name
select * from inventory where item.name = 20
$gt (Больше чем)
db.inventory.find( { qty: { $gt: 20 } } )
Эквивалент SQL:
select * from inventory where qty > 20
$gte (Больше или равно)
db.inventory.find( { qty: { $gte: 20 } } )
Эквивалент SQL:
select * from inventory where qty >= 20
$in (Входит в)
Соответствует одному значению в массиве
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
Эквивалент SQL:
select * from inventory where qty in (5, 15)
$nin (Не входит в)
Противоположен оператору $in
db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
Эквивалент SQL:
select * from inventory where qty not in (5, 15)
$lt (Меньше чем)
db.inventory.find( { qty: { $lt: 20 } } )
Эквивалент SQL:
select * from inventory where qty < 20