2014-12-30 4 views
0

Мой вопрос о том, как MongoDB работает при запросе документа MultiKey.Mongodb - Query 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 AND b), как MongoDB вызывает запрос? Видит ли он, что у меня есть индекс на c или он пытается найти индекс только для c И b?

+1

Использование метода .explain() после поиска() и просмотра nscannedObjects и nscanned. это поможет вам проверить использование индекса – Disposer

+0

Просто сделал это ... и nscannedObjects - это размер коллекции. Почему он проходит через всю коллекцию, чтобы получить что-то по индексированному полю. – refaelos

+1

Я сделал тестовый пример для себя на основе ваших документов и для поиска в двух документах, я получил nscanned = 1, означает, что он использует индексирование. посмотрите на курсор в .explain(), и если он использует индекс, курсор должен быть чем-то вроде «BtreeCursor c_1» – Disposer

ответ

0

Благодаря Disposer

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

Смежные вопросы