sql >> Base de Datos >  >> NoSQL >> MongoDB

Campo de selección de Mongodb para devolver el documento incrustado en la matriz

Sí, pero no como tú quieres. Si hace lo siguiente, solo obtendrá el primer elemento de la matriz:

coll.find({_id:'2'}, { 'objects.0': 1})

Sin embargo, lo que realmente quieres es algo parecido a lo siguiente:

coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})

Por supuesto, eso no funciona en MongoDB.

Mirando su otra pregunta , esta es una de las razones para usar el "objeto incrustado" en lugar de la "matriz de objetos". Con "objeto incrustado" podría hacer lo siguiente:

coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object

Esto le permite elegir solo los "objetos incrustados" que necesita.

Lo que pasa con MongoDB es que el documento principal es siempre buscado Las consultas devuelven documentos de nivel superior. Esto está integrado en toda la arquitectura. Incluso si solicita solo una porción del documento, el servidor aún tiene que cargar el documento completo en la memoria antes de entregarle la parte solicitada.

La única forma de evitar esto puede ser el nuevo Marco de agregación , pero eso aún no está en la rama estable.