2017-01-16 1 views

ответ

1

Я думаю, что вам не нужно создавать другой индекс {a:1}, из-за prefixes.

Префикс индекса - это начальные подмножества индексированных полей. Например, рассмотрим следующий составной индекс:

{ "item": 1, "location": 1, "stock": 1 } 

Индекс имеет следующие индексные префиксы:

{ item: 1 } 
{ item: 1, location: 1 } 

Для индекса соединения, MongoDB может использовать индекс для поддержки запросов на указательном префиксов. Таким образом, MongoDB может использовать индекс для запросов по следующим направлениям:

  • item поля,
  • item поля и location поля,
  • item поля и location поля и stock поле.

и создание составного индекса является более эффективным [1].
И MongoDB может использовать пересечение либо всего индекса, либо префикса индекса [2].

1

Отъезд MongoDB docs Create a compound index.

Следующая операция создает индекс восходящий на пункт и фондовых полей:

db.products.createIndex({ "item": 1, "stock": 1 }) 

В дополнение к поддержке запросов, которые соответствуют по всем полям индекса, составные индексы могут поддерживать запросы, которые соответствуют на префикс полей индекса . То есть, индекс поддерживает запросы на item поле как также как item и stock поля:

db.products.find({ item: "Banana" }) 
db.products.find({ item: "Banana", stock: { $gt: 5 } }) 

Для индекса соединения, MongoDB может использовать индекс для поддержки запросов на указательном префиксов.

Кстати, если создать составной индекс:

{ "item": 1, "location": 1, "stock": 1 } 

MongoDB может использовать индекс для запросов по следующим направлениям:

  • поля элемента,
  • поля элемента и поле местоположения,
  • поле товара и поле местоположения и поле запаса.

Но это было бы не так эффективно на item и stock.

Надеюсь, это поможет.

+0

Это действительно не отвечает на мой вопрос, но ваша ссылка делает. «Следующий индекс в коллекции: {x: 1, y: 1, z: 1} Может поддерживать запросы, поддерживаемые следующими индексами: {x: 1}, {x: 1, y: 1}" – RainingChain

+0

@RainingChain Извините для этого я обновил свой ответ, надеюсь, что это поможет. – McGrady