Документация mongodb для multikeys дает пример запроса полей встроенных объектов в массиве:
http://www.mongodb.org/display/DOCS/Multikeys
Но нет объяснений, как вы создаете индекс для этой ситуации. Создание индекса в массиве, похоже, не работает (используя механизм объяснения, вы можете видеть, что индекс не используется).
Дополнительные детали:
> // find posts where julie commented
> db.posts.find( { "comments.author" : "julie" } )
{"title" : "How the west was won",
"comments" : [{"text" : "great!" , "author" : "sam"},
{"text" : "ok" , "author" : "julie"}],
"_id" : "497ce79f1ca9ca6d3efca325"}
Если вы делаете db.articles.ensureIndex( { comments: 1 } )
он не будет индексировать подполя объектов комментариев, а скорее сам объект комментариев.
Таким образом, следующий индекс будет использовать индекс:
> db.posts.find( {comments : { "author" : "julie", "text" : "ok" } } )
Поскольку он ищет объекты комментариев
Но следующее не будет использовать индекс:
> db.posts.find( { "comments.author" : "julie" } )
Итак, как вы получаете mongodb для индексации для второго случая?