Mongodb — запрос индексированных документов MultiKey

Мой вопрос о том, как работает MongoDB при запросе документа MultiKey.

Предполагая, что у меня есть эти документы: { a: 1, b: 2, c: ['x','y','z'] }, { a:3, b: null, c: ['x','z'] }

Мой запрос таков: db.<collection>.find({ b: null, c: 'x'})

И мой индекс: db.<collection>.ensureIndex({ c: 1 })

Мой вопрос: для приведенного выше запроса (который запрашивает c И b) как MongoDB вызывает запрос? Он «видит», что у меня есть индекс для c, или он пытается искать индекс только для c И b?


person refaelos    schedule 30.12.2014    source источник
comment
используйте метод .explain() после find() и посмотрите на nscannedObjects и nscanned. это поможет вам проверить использование индекса   -  person Disposer    schedule 30.12.2014
comment
Только что сделал это... и nscannedObjects - это размер коллекции. Почему он проходит через всю коллекцию только для того, чтобы получить что-то по проиндексированному полю.   -  person refaelos    schedule 30.12.2014
comment
Сделал для себя тест кейс на основе ваших документов и для поиска по 2 документам получил nscanned=1, значит использует индексацию. посмотрите на курсор в .explain(), и если он использует индекс, курсор должен быть чем-то вроде BtreeCursor c_1   -  person Disposer    schedule 30.12.2014
comment
Прохладный. Теперь это работает. Вероятно, для индексации больших коллекций требуется время.   -  person refaelos    schedule 30.12.2014


Ответы (1)


Спасибо диспоузер

Запрос просто находит индекс c, даже если оператор включает c и b.

person refaelos    schedule 30.12.2014