English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основное руководство по MongoDB

Дополнительное руководство по MongoDB

Поиск документа MongoDB

В этой главе мы изучим, как запрашивать документы из коллекции MongoDB.

find() MongoDB

Чтобы запросить данные из коллекции MongoDB, вам нужно использовать методfind()метод.

грамматика

find()Основная грамматика метода такая:

> db.COLLECTION_NAME.find()

find() метод будет отображать все документы в неструктурированном формате.

Онлайн пример

предположим, что мы уже создали коллекцию с именем mycol-

> use sampleDB
перешли на db sampleDB
> db.createCollection("mycol")
{"ok": 1}
>

Используя метод insert() вставьте 3 документа, как показано ниже-

> db.mycol.insert([
	{
		title: "MongoDB Overview",
		description: "MongoDB is not a SQL database",
		by: "Basic Tutorial",
		url: "http://ru.oldtoolbag.com",
		tags: ["mongodb", "database", "NoSQL"],
		likes: 100
	},
	{
		title: "NoSQL Database",
		description: "NoSQL databases do not have tables",
		by: "Basic Tutorial",
		url: "http://ru.oldtoolbag.com",
		tags: ["mongodb", "database", "NoSQL"],
		likes: 20,
		comments: [
			{
				user: "user1",
				message: "My first comment",
				dateCreated: new Date(2013,11,10,2,35),
				like: 0
			}
		]
	}
]

The following method retrieves all documents in the collection -

> db.mycol.find()
{"_id" : ObjectId("5dd4e2cc0821d3b44607534c"), "title" : "MongoDB Overview", "description" : "MongoDB is not a SQL database", "by" : "Basic Tutorial", "url" : "http://ru.oldtoolbag.com", "tags" : ["mongodb", "database", "NoSQL"], "likes" : 100}
{"_id" : ObjectId("5dd4e2cc0821d3b44607534d"), "title" : "NoSQL Database", "description" : "NoSQL databases do not have tables", "by" : "Basic Tutorial", "url" : "http://ru.oldtoolbag.com", "tags" : ["mongodb", "database", "NoSQL"], "likes" : 20, "comments" : [{ "user" : "user1", "message" : "My first comment", "dateCreated" : new Date(2013,11,10,2,35), "like" : 0 }]}
>

Метод pretty()

Для форматирования результатов можно использовать метод pretty().

грамматика

> db.COLLECTION_NAME.find().pretty()

Онлайн пример

Ниже приведен пример поиска всех документов из коллекции с именем mycol и их отображения в удобочитаемом формате.

> db.mycol.find().pretty()
{
	"_id" : ObjectId("5dd4e2cc0821d3b44607534c"),
	"title" : "MongoDB Overview",
	"description" : "MongoDB не является SQL-базой данных",
	"by" : "基础教程",
	"url": "http://ru.oldtoolbag.com",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 100
}
{
	"_id": ObjectId("5dd4e2cc0821d3b44607534d"),
	"title": "NoSQL Database",
	"description": "NoSQL-база данных не имеет таблиц",
	"by" : "基础教程",
	"url": "http://ru.oldtoolbag.com",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes": 20,
	"comments": [
		{
			"user": "user1",
			"message": "My first comment",
			"dateCreated": ISODate("2013-12-09T21:05:00Z"),
			"like": 0
		}
	]
}

метод.findOne()

Кроме метода find(), существует ещеfindOne()Метод возвращает только один документ.

грамматика

> db.COLLECTIONNAME.findOne()

Онлайн пример

Ниже приведен пример поиска документа с заголовком MongoDB Overview.

> db.mycol.findOne({title: "MongoDB Overview"})
{
	"_id": ObjectId("5dd6542170fb13eec3963bf0"),
	"title" : "MongoDB Overview",
	"description" : "MongoDB не является SQL-базой данных",
	"by" : "基础教程",
	"url": "http://ru.oldtoolbag.com",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 100
}

Сравнение MongoDB с RDBMS в операторе WHERE

Чтобы выполнить запрос на документ по определенным условиям, можно использовать следующие операции.

ОперацииФорматПримерАналогичные предложения в RDBMS
Равно{<key>:<value>}db.col.find({"by":"基础教程"}).pretty()where by = '基础教程'
Меньше{<key>:{$lt:<value>}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50
Меньше или равно{<key>:{$lte:<value>}}db.col.find({"likes":{$lte:50}}).pretty()where likes <= 50
Больше{<key>:{$gt:<value>}}db.col.find({"likes":{$gt:50}}).pretty()where likes > 50
Больше или равно{<key>:{$gte:<value>}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50
Не равно{<key>:{$ne:<value>}}db.col.find({"likes":{$ne:50}}).pretty()where likes != 50
Значение находится в массиве{<key>:{$in:[<value1>, <value2>,……<valueN>]}}db.mycol.find({"name":{$in:["Raj", "Ram", "Raghu"]}}).pretty()Где name соответствует любому из значений :["Raj", "Ram", "Raghu"]
Значение не находится в массиве{<key>:{$nin:<value>}}db.mycol.find({"name":{$nin:["Ramu", "Raghav"]}}).pretty()Значение name не находится в массиве :["Ramu", "Raghav"] или оно根本 не существует

Условие AND в MongoDB

грамматика

Чтобы выполнить запрос на основе условия AND, вам нужно использовать ключевое слово $and. Вот базовая грамматика AND:

db.mycol.find({ $and: [ {<key1>:<value1>}, { <key2>:<value2>} ] })

пример

ниже приведен пример, который покажет все учебные материалы, написанные '基础教程' и имеющие заголовок 'MongoDB Overview'.

> db.mycol.find({$and:[{"by":"基础教程"},{"title": "MongoDB Overview"}]}).pretty()
{
	"_id" : ObjectId("5dd4e2cc0821d3b44607534c"),
	"title" : "MongoDB Overview",
	"description" : "MongoDB не является SQL-базой данных",
	"by" : "基础教程",
	"url" : "https://ru.oldtoolbag.com",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 100
}
>

Для примера, приведенного выше, эквивалентным where-предложением будет' where by = '基础教程' AND title = 'MongoDB Overview' '. Вы можете передать в подзапрос find любое количество пар ключ-значение.

Условие MongoDB 'ИЛИ'

грамматика

Чтобы выполнить поиск документов на основе условия 'ИЛИ', необходимо использовать$orключевые слова. ВотИЛИбазовая грамматика:

>db.mycol.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

пример

ниже приведен пример, который покажет все учебные материалы, написанные 'tutorials point' или имеющие заголовок 'MongoDB Overview'.

>db.mycol.find({$or:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty()
{
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB не является SQL-базой данных",
   "by": "базовый учебник",
   "url": "http://ru.oldtoolbag.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}
>

MongoDB AND и OR используются вместе

Онлайн пример

ниже приведен пример документа, у которого количество лайков (likes) больше 10 и заголовок (title) равен 'MongoDB概述' или 'by' равно '基础教程'. Это эквивалентно SQL where-предложению 'where likes>10 AND (by = '基础教程' OR title = 'MongoDB概述')'

db.mycol.find({"likes": {$gt:10}, $or: [{"by": "tutorials point"},
   {"title": "MongoDB Overview"}]}).pretty()
{
   "_id": ObjectId(7df78ad8902c),
   "title": "Обзор MongoDB", 
   "description": "MongoDB не является SQL-базой данных",
   "by": "базовый учебник",
   "url": "http://ru.oldtoolbag.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}
>

Условие NOR в MongoDB

грамматика

Чтобы выполнить запрос на документ по условию NOR, нужно использовать ключевое слово $nor. ВотNORбазовая грамматика:

> db.COLLECTION_NAME.find(
	{
		$nor: [
			{key1: value1}, {key2:value2}
		]
	}
)

пример

предположим, что мы работаем с集合 empDetails вставлены 3 документа, как показано ниже-

db.empDetails.insertMany(
	[
		{
			First_Name: "Radhika",
			Last_Name: "Sharma",
			Age: "26",
			e_mail: "[email protected]",
			phone: "9000012345"
		},
		{
			First_Name: "Rachel",
			Last_Name: "Christopher",
			Age: "27",
			e_mail: "[email protected]",
			phone: "9000054321"
		},
		{
			First_Name: "Fathima",
			Last_Name: "Sheik",
			Age: "24",
			e_mail: "[email protected]",
			phone: "9000054321"
		}
	]
)

Следующий пример будет искать документы, имена которых не "Radhika", и не "Christopher"

> db.empDetails.find(
	{
		$nor: [
			40
			{"First_Name": "Radhika"},
			{"Last_Name": "Christopher"}
		]
	}
).pretty()
{
	"_id": ObjectId("5dd631f270fb13eec3963bef"),
	"First_Name" : "Fathima",
	"Last_Name" : "Sheik",
	"Age" : "24",
	"e_mail" : "[email protected]",
	"phone" : "9000054321"
}

Условие NOT в MongoDB

грамматика

Чтобы выполнить запрос на документ по условию NOT, вам нужно использовать ключевое слово $not, вотNOTОсновная грамматика:

> db.COLLECTION_NAME.find(
	{
		$NOT: [
			{key1: value1}, {key2:value2}
		]
	}
).pretty()

Онлайн пример

Следующий пример будет检索ать документы, возраст которых не превышает 25 лет

> db.empDetails.find({"Age": {$not: {$gt: "25"}}})
{
	"_id" : ObjectId("5dd6636870fb13eec3963bf7"),
	"First_Name" : "Fathima",
	"Last_Name" : "Sheik",
	"Age" : "24",
	"e_mail" : "[email protected]",
	"phone" : "9000054321"
}