MongoDB Индексы одного поля
Описание
Все индексы в MongoDB являются индексами B-дерева, которые поддерживают совпадения на соответствие и запросы диапазона. Внутри индекс упорядочивает элементы в порядке, отсортированном по значению поля индекса. Упорядочение индекса позволяет MongoDB возвращать отсортированные результаты, используя порядок документов в индексе.
MongoDB предоставляет индексы для любого поля в наборе документов. MongoDB поддерживает либо одно поле, либо несколько полей в зависимости от операций, которые нужны пользователю. Индекс по умолчанию для коллекций имеет mongoDB в поле _id, дополнительные индексы могут быть добавлены пользователем для поддержки важных запросов и операций.
Вот документы в коллекции «empinfo».
{
"_id" : ObjectId("548eb3a051ca033c1c01054d"),
"emp_id" : "SALS",
"emp_name" : "Pat",
"designation" : "clerk",
"department" : "sales"
}
{
"_id" : ObjectId("548eb3a051ca033c1c01054e"),
"emp_id" : "OFFC",
"emp_name" : "Jons",
"designation" : "peon",
"department" : "sales"
}
{
"_id" : ObjectId("548eb3a051ca033c1c01054f"),
"emp_id" : "CLC",
"emp_name" : "Tnit",
"designation" : "president",
"department" : "sales"
}
Следующая команда создает индекс для столбца emp_id.
> db.empinfo.ensureIndex( { "emp_id" : 1 } );
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
If you want to see the list of created index, here is the following command.
> db.system.indexes.find();
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "empinfo.empinfo" }
{ "v" : 1, "key" : { "emp_id" : 1 }, "name" : "emp_id_1", "ns" : "empinfo.empinfo" }
Индексы на встроенных полях
Индексы можно создавать на полях, встроенных во вложенные документы, так как вы можете индексировать поля верхнего уровня в документах.
Существует разница между индексами во встроенных полях и индексами во вложенных документах. Индексы в поддокументе включают в себя полный контент вплоть до максимального размера индекса, тогда как индексы во встроенных полях позволяют пользователю использовать «точечную нотацию» для самостоятельного поиска во вложенных документах.
Рассмотрим следующую коллекцию с именем 'empinfo', которая содержит документы.
{
"_id" : ObjectId("548fe6d898fd7de25e8d3aa9"),
"emp_id" : "SALS",
"emp_name" : "Pat",
"address" : [
{
"street" : "Court Street",
"city" : "London",
"zip" : "5698722"
}
]
}
{
"_id" : ObjectId("548fe6d898fd7de25e8d3aaa"),
"emp_id" : "OFFC",
"emp_name" : "Jones",
"address" : [
{
"street" : "Church Avenue",
"city" : "Paris",
"zip" : "632902"
}
]
}
Следующая команда создает индекс для поля address.zip, используя следующую спецификацию:
> db.empinfo.ensureIndex( { "address.zip": 1 } );
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
If you want to see the created index, see the following command.
> db.system.indexes.find();
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "empinfo.empinfo" }
{ "v" : 1, "key" : { "address.zip" : 1 }, "name" : "address.zip_1", "ns" : "empinfo.empinfo" }
>
Указатели на поддокументы
Индекс также может быть создан на поддокумент.
Здесь ниже образец коллекции с именем 'empinfo' содержит адрес поля в своих документах.
{
"_id" : ObjectId("54901b4b4b71cc67737765a5"),
"emp_id" : "SALS",
"emp_name" : "Pat",
"address" : {
"street" : "Court Street",
"city" : "London",
"zip" : "5698722"
}
}
{
"_id" : ObjectId("54901b4b4b71cc67737765a6"),
"emp_id" : "MARK",
"emp_name" : "James",
"address" : {
"street" : "Church Avenue",
"city" : "Paris",
"zip" : "532460"
}
}
Поле адреса является вложенным документом, содержащим встроенные поля city и zip. Следующая команда создает индекс для поля адреса в целом.
> db.empinfo.ensureIndex( { address: 1 } );
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
If you want to lists the creating index, here is the command below.
> db.system.indexes.find();
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "empinfo.empinfo" }
{ "v" : 1, "key" : { "address" : 1 }, "name" : "address_1", "ns" : "empinfo.empinfo" }
Следующий запрос может использовать индекс в поле адреса:
> db.empinfo.find( { address: { street: "Court Street", city: "London",zip:"5698722" } } ).pretty();
{
"_id" : ObjectId("54901b4b4b71cc67737765a5"),
"emp_id" : "SALS",
"emp_name" : "Pat",
"address" : {
"street" : "Court Street",
"city" : "London",
"zip" : "5698722"
}
}
Из вышеприведенного вывода видно, что при выполнении сопоставления совпадений для вложенных документов порядок полей имеет значение, и вложенные документы должны точно совпадать.
См. Пример ниже, следующий запрос не соответствует вышеуказанному документу:
db.empinfo.find( { address: { city: "London",zip:"5698722",street: "Court Street" } } );
Предыдущий: MongoDB DELETE
Далее: Введение в методы оболочки Mongodb
Новый контент: Composer: менеджер зависимостей для PHP , R программирования