Как обеспечить индекс первого элемента массива в MongoDB для более быстрого запроса? - PullRequest
4 голосов
/ 28 февраля 2012

Обеспечение индекса для элемента массива не работает должным образом для меня.

Например, со следующими данными

> db.test.find()
{ "_id" : 7891236423, "arr" : [ "a", "b", "c" ] }
{ "_id" : 7891236424, "arr" : [ "b", "c", "d" ] }
{ "_id" : 7891236425, "arr" : [ "b", "c", "a" ] }
>

следующий запрос работает, как и ожидалось, когда нетindex

> db.test.find({"arr.0":"a"})
{ "_id" : 7891236423, "arr" : [ "a", "b", "c" ] }
>

, но тот же запрос не возвращает результат, если я пытаюсь создать индекс для arr.0

> db.test.ensureIndex({"arr.0":1})
> db.test.find({"arr.0":"a"})
>

Я не понимаю, что здесь происходит, в моеммнение, что индекс никогда не должен влиять на возвращаемые данные.Или это должно быть?

Это ошибка?Или злоупотребление индексом?Я был бы рад любым объяснениям такого поведения и еще более рад любым подсказкам о том, как мне получить индекс для одного элемента массива.

PS: я знаю, что могу создать индекс для arrи сначала запросите arr перед запросом arr.0, что является допустимым обходным решением для данного примера.Но это не помогает, как только мне нужно отсортировать огромное количество данных по arr.0 (MongoDB требует индекс для этого)

1 Ответ

1 голос
/ 01 марта 2012

Это известная проблема с индексами v0, используемыми в версии 1.8 и ранее.Новые индексы v1 в 2.0+ поддерживают это.Обновление до 2.0.3 должно решить вашу проблему.Вы можете найти инструкции по обновлению до 2.0 здесь: http://www.mongodb.org/display/DOCS/2.0+Release+Notes#2.0ReleaseNotes-Upgrading

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...