¿Es posible devolver solo un subdocumento?
Sí, pero no de la manera que desee. Si lo hace lo siguiente, solo se pondrá en contacto el primer elemento de la matriz:
coll.find({_id:'2'}, { 'objects.0': 1})
Sin embargo, lo que realmente quiere es algo que se parece a lo siguiente:
coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})
Por supuesto, eso en realidad no funciona en MongoDB.
En cuanto a your other question, esta es una de las razones para utilizar el "objeto incrustado" en lugar de la "matriz de objetos". Con "objeto incrustado" puede 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.
De esa manera no tengo que seleccionar todo el objeto padre ...
La cosa con MongoDB es que el documento de nivel superior es siempre descabellada. Las consultas devuelven documentos de nivel superior. Esto está cocido en toda la arquitectura. Incluso si solicita solo una porción del documento, el servidor todavía tiene que cargar todo el documento en la memoria antes de servirle la pieza solicitada.
La única forma de evitar esto puede ser la nueva Aggregation Framework, pero aún no está en la rama estable.
Genial, gracias por la explicación. –