Эта глава знакомит с базовым синтаксисом запросов 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 обратитесь к последующим главам.