Tak, ale nie tak, jak chcesz. Jeśli wykonasz następujące czynności, odzyskasz tylko pierwszy element tablicy:
coll.find({_id:'2'}, { 'objects.0': 1})
Jednak to, czego naprawdę chcesz, to coś, co wygląda następująco:
coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})
Oczywiście to nie działa w MongoDB.
Patrząc na Twoje inne pytanie , jest to jeden z powodów używania „obiektu osadzonego” zamiast „tablicy obiektów”. Za pomocą „osadzonego obiektu” możesz wykonać następujące czynności:
coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object
Dzięki temu możesz wybrać tylko „osadzone obiekty”, których potrzebujesz.
Rzecz w MongoDB polega na tym, że dokument nadrzędny jest zawsze pobrano. Zapytania zwracają dokumenty najwyższego poziomu. To jest wypiekane w całej architekturze. Nawet jeśli zażądasz tylko fragmentu dokumentu, serwer nadal musi załadować cały dokument do pamięci przed udostępnieniem żądanego fragmentu.
Jedynym sposobem na obejście tego może być nowa Struktura agregacji , ale to nie jest jeszcze w stabilnej gałęzi.