Эта глава знакомит с базовым синтаксисом запросов MongoDB через оболочку mongo. В оболочке mongo используется метод db.collection.find()
для запроса данных.
Подготовка тестовых данных
Вставьте несколько данных в коллекцию inventory.
db.inventory.insertMany([
{ item: "журнал", qty: 25, size: { h: 14, w: 21, uom: "см" }, status: "A" },
{ item: "тетрадь", qty: 50, size: { h: 8.5, w: 11, uom: "дюйм" }, status: "A" },
{ item: "бумага", qty: 100, size: { h: 8.5, w: 11, uom: "дюйм" }, status: "D" },
{ item: "планер", qty: 75, size: { h: 22.85, w: 30, uom: "см" }, status: "D" },
{ item: "открытка", qty: 45, size: { h: 10, w: 15.25, uom: "см" }, status: "A" }
]);
Запрос всех документов
Запрос всех документов в коллекции inventory, {} представляет пустое условие запроса.
db.inventory.find( {} )
Аналогично следующему оператору SQL:
SELECT * FROM inventory
Условия равенства запроса
Синтаксис:
{ field: value, ... }
Пример 1:
db.inventory.find( { status: "D" } )
Аналогично следующему оператору SQL:
SELECT * FROM inventory WHERE status = "D"
Пример 2: Запрос вложенного поля, используйте точку (.) для соединения полей вложенных документов.
db.inventory.find( { "size.uom": "дюйм" } )
Аналогично следующему оператору SQL:
SELECT * FROM inventory WHERE size.uom = "дюйм"
Примечание: Документы MongoDB хранятся в формате JSON, поэтому они поддерживают использование вложенных полей в качестве условий запроса.
Использование операторов запросов
MongoDB поддерживает множество операторов запросов для реализации разнообразных сложных запросов. Синтаксис:
{ <field1>: { <operator1>: <value1> }, ... }
Объяснение:
- field1: имя поля
- operator1: оператор
- value1: параметр оператора
Пример оператора $in:
db.inventory.find( { status: { $in: [ "A", "D" ] } } )
Аналогично следующему SQL-запросу с оператором "in":
SELECT * FROM inventory WHERE status in ("A", "D")
Примечание: Для получения подробной информации об операторах обращайтесь к последующему разделу MongoDB по запросам.
Условие "и"
Аналогично SQL, MongoDB также поддерживает условие "и".
Пример:
// Введите несколько условий последовательно и соедините их, используя "и"
db.inventory.find( { status: "A", item: "открытка"} )
Аналогично следующему оператору SQL:
SELECT * FROM inventory WHERE status = "A" AND item = "открытка"
Условие "или"
Аналогично SQL, MongoDB также поддерживает условие "или", которое реализуется через оператор $or.
Синтаксис:
{
$or: [
{condition1},
{condition2},
.....
]
}
Пример:
db.inventory.find( { $or: [ { status: "A" }, { item: "открытка"} ] } )
Аналогично следующему оператору SQL:
SELECT * FROM inventory WHERE status = "A" OR item = "открытка"
Комбинирование условий "и" и "или"
Аналогично SQL, MongoDB может объединять сложные условия запроса с помощью "и" и "или".
Пример:
db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
Здесь используется оператор $lt для меньше и сопоставление регулярного выражения.
Это похоже на следующий оператор SQL:
SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 or item like 'p%')
Подсказка: Для подробного объяснения условий запросов MongoDB обратитесь к последующим главам.