Руководство по MongoDB. Ограничение документов.

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


Метод limit()

Для того, чтобы ограничить количество документов, получаемых в результате выполнения метода find() в MongoDB предусмотрен метод limit().

Данный метод имеет следующий синтаксис:


db.ИМЯ_КОЛЛЕКЦИИ.find().limit(КОЛИЧЕСТВО_ДОКУМЕНТОВ)

Для понимания того, как это работает на практике, рассмотрим простой пример:

Предположим, что у нес есть коллекция developers, которая содержит следующие документы:


> db.developers.find().pretty()
{
	"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
	"title" : "Eugene Suleimanov",
	"specialty" : "Java",
	"skills" : [
		"Java",
		"Hibernate",
		"Spring"
	],
	"salary" : 3500
}
{
	"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
	"title" : "Ivan Ivanov",
	"specialty" : "Java",
	"skills" : [
		"Java",
		"Hibernate",
		"Spring"
	],
	"salary" : 3500
}
{
	"_id" : ObjectId("5815f4f535ee883c37ac8b4f"),
	"title" : "Nikolay Nikolaev",
	"specialty" : "C++",
	"skills" : [
		"C++",
		"STL",
		"SQL"
	],
	"salary" : 3500
}

Для того, ограничить список выводимых документов первыми 2-мя, нам необходимо использовать следующую команду:


> db.developers.find().pretty().limit(2)
{
	"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
	"title" : "Eugene Suleimanov",
	"specialty" : "Java",
	"skills" : [
		"Java",
		"Hibernate",
		"Spring"
	],
	"salary" : 3500
}
{
	"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
	"title" : "Ivan Ivanov",
	"specialty" : "Java",
	"skills" : [
		"Java",
		"Hibernate",
		"Spring"
	],
	"salary" : 3500
}

Если же мы не используем метод limit(), то будут выведены все документы, которые содержатся в указанной коллекции.


Метод skip()
Кроме метода limit(), в MongoDB существует метод skip(), который пропускает (игнорирует) указанное количество документов коллекции.

Данный метод имеет следующий синтаксис:


db.ИМЯ_КОЛЛЕКЦИИ.find().limit(КОЛИЧЕСТВО_ДОУМЕНТОВ).skip(КОЛИЧЕСТВО_ДОКУМЕНТОВ).

Для понимания того, как это работает на практике, рассмотрим простой пример:
Предположим, что у нас есть коллекция developers:


> db.developers.find().pretty()
{
	"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
	"title" : "Eugene Suleimanov",
	"specialty" : "Java",
	"skills" : [
		"Java",
		"Hibernate",
		"Spring"
	],
	"salary" : 3500
}
{
	"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
	"title" : "Ivan Ivanov",
	"specialty" : "Java",
	"skills" : [
		"Java",
		"Hibernate",
		"Spring"
	],
	"salary" : 3500
}
{
	"_id" : ObjectId("5815f4f535ee883c37ac8b4f"),
	"title" : "Nikolay Nikolaev",
	"specialty" : "C++",
	"skills" : [
		"C++",
		"STL",
		"SQL"
	],
	"salary" : 3500
}

Следующая команда ограничит количество получаемых документов первыми 2-мя и проигнорирует первый документ коллекции:


> db.developers.find().pretty().limit(2).skip(1)
{
	"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
	"title" : "Ivan Ivanov",
	"specialty" : "Java",
	"skills" : [
		"Java",
		"Hibernate",
		"Spring"
	],
	"salary" : 3500
}
{
	"_id" : ObjectId("5815f4f535ee883c37ac8b4f"),
	"title" : "Nikolay Nikolaev",
	"specialty" : "C++",
	"skills" : [
		"C++",
		"STL",
		"SQL"
	],
	"salary" : 3500
}

На этом мы заканчиваем изучение способов ограничения количества документов, получаемых в результате выполнения запроса find().
В следующей статье мы рассмотрим способ сортировки полученных в результате выполнения запроса find() документов.