MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongodb seleziona il campo per restituire il documento incorporato nell'array

Sì, ma non come vorresti. Se fai quanto segue, otterrai solo il primo elemento dell'array:

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

Tuttavia, quello che vuoi veramente è qualcosa che assomigli al seguente:

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

Ovviamente, questo non funziona in MongoDB.

Osservando l'altra tua domanda , questo è uno dei motivi per utilizzare l'"oggetto incorporato" invece dell'"array di oggetti". Con "oggetto incorporato" potresti fare quanto segue:

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

Ciò ti consente di selezionare solo gli "oggetti incorporati" di cui hai bisogno.

Il problema con MongoDB è che il documento padre è sempre preso. Le query restituiscono documenti di primo livello. Questo è cotto nell'intera architettura. Anche se richiedi solo una parte del documento, il server deve comunque caricare l'intero documento in memoria prima di servirti il ​​pezzo richiesto.

L'unico modo per aggirare questo problema potrebbe essere il nuovo Aggregation Framework , ma non è ancora nel ramo stabile.