tutorial - mongodb university
En MongoDB, ¿cómo indexar los campos de un objeto incrustado en una matriz? (2)
Puedes crear el siguiente índice:
db.posts.ensureIndex({"comments.author" : 1})
Esto indexará solo el campo de autor de los documentos incrustados. Tenga en cuenta que el índice será utilizado para
db.posts.find( { "comments.author" : "julie" } )
Tanto como
db.posts.find( { comments: {$elemMatch: {author : "julie" }}} )
La documentación de mongodb para multikeys proporciona un ejemplo de consulta de campos de objetos incrustados en una matriz:
http://www.mongodb.org/display/DOCS/Multikeys
Pero no hay explicación sobre cómo crear un índice para esa situación. La creación de un índice en la matriz no parece funcionar (utilizando el mecanismo de explicación puede ver que el índice no se usa).
Detalles adicionales:
> // 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"}
Si lo hace db.articles.ensureIndex( { comments : 1 } )
no indexará los subcampos de los objetos de comentarios, sino solo el objeto de comentarios en sí.
Así que lo siguiente usaría el índice:
> db.posts.find( {comments : { "author" : "julie", "text" : "ok" } } )
Porque se busca en los objetos de comentarios.
Pero lo siguiente no usaría el índice:
> db.posts.find( { "comments.author" : "julie" } )
Entonces, ¿cómo lograr que mongodb se indexe para el segundo caso?
usted crea el índice como si lo hiciera con un campo "normal";
db.[collection].ensureIndex( { [yourArrayField] : 1 } )