The mongodb documentation for multikeys gives an example of querying embedded object fields in an array:
http://www.mongodb.org/display/DOCS/Multikeys
But there's no explanation on how you create an index for that situation. Creating an index on the array doesn't seem to work (using the explain mechanism you can see the index isn't use).
Additional details:
> // 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"}
If you do db.articles.ensureIndex( { comments : 1 } ) it won't index the subfields of the comments objects but rather only the comments object itself.
So the following would use the index:
> db.posts.find( {comments : { "author" : "julie", "text" : "ok" } } )
Because it's search on the comments objects
But the following wouldn't use the index:
> db.posts.find( { "comments.author" : "julie" } )
So how do you get mongodb to index for the second case?
db.articles.ensureIndex( { tags : 1 } ).