MongoDB индексация (sureIndex) - PullRequest
3 голосов
/ 28 марта 2012

Например, у меня есть коллекция таких документов:

{"tag_cloud":[{"value":"games", "count":10}, {"value":"girls", "count":500}]}
{"tag_cloud":[{"value":"games", "count":5}, {"value":"stack", "count":100}]}
{"tag_cloud":[{"value":"mongodb", "count":1000}, {"value":"thread", "count":15}]}

какая разница между двумя типами индекса:

  1. ensureIndex ({ "tag_cloud"})
  2. ensureIndex ({ "tag_cloud.value"}); ensureIndex ({ "tag_cloud.count"})

в контексте запроса:

db.foo.find({"tag_cloud.value":"games"}).sort({"tag_cloud.count":-1});

Спасибо !!!

1 Ответ

4 голосов
/ 28 марта 2012

MongoDB может использовать только один индекс за один запрос, поэтому ваше предложение создать два индекса не будет работать.Вместо этого я бы создал составной индекс:

> db.foo.ensureIndex({"tag_cloud.value": 1, "tag_cloud.count": -1})

Этот индекс можно использовать как для фильтрации только по определенному элементу или элементам, которые вы хотите рассмотреть, а затем также возвращать в порядке убывания в порядке убывания:

> db.foo.find({"tag_cloud.value":"games"}).sort({"tag_cloud.count":-1}).explain()
{
    "cursor" : "BtreeCursor tag_cloud.value_1_tag_cloud.count_-1",
    "isMultiKey" : true,
    "n" : NumberLong(2),
    "nscannedObjects" : NumberLong(2),
    "nscanned" : NumberLong(2),
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...