Czy możliwe jest zwrócenie tylko jednego poddokumentu?
Tak, ale nie tak, jak chcesz. Jeśli wykonaj następujące czynności, będzie można dostać tylko z powrotem do pierwszego elementu tablicy:
coll.find({_id:'2'}, { 'objects.0': 1})
Jednak to, co naprawdę chcesz to coś, co wygląda następująco:
coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})
oczywiście, że w rzeczywistości nie działa w MongoDB.
Patrząc na your other question, jest to jeden z powodów używania "obiektu osadzonego" zamiast "tablicy obiektów". Z „osadzony obiekt” można wykonać następujące czynności:
coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object
pozwala to wybrać tylko „osadzone obiekty” trzeba.
ten sposób nie mam, aby zaznaczyć cały obiekt nadrzędny ...
Rzecz z MongoDB jest to, że dokument nadrzędny jest zawsze naciągane. Zapytania zwracają dokumenty najwyższego poziomu. To jest wypiekane w całej architekturze. Nawet jeśli zażądasz tylko kawałka dokumentu, serwer nadal musi załadować cały dokument do pamięci przed podaniem żądanego fragmentu.
Jedynym sposobem obejścia tego może być nowa Aggregation Framework, ale nie jest to jeszcze gałąź stabilna.
Świetnie, dzięki za wyjaśnienie. –