Можно ли вернуть только один поддокумент?
Да, но не так, как вы хотите.Если вы сделаете следующее, вы получите только первый элемент массива:
coll.find({_id:'2'}, { 'objects.0': 1})
Однако то, что вы действительно хотите, выглядит примерно так:
coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})
Конечно, это на самом деле не работает в MongoDB.
Глядя на ваш другой вопрос , это одна из причин использовать «встроенный объект» вместо «массива объектов»,С помощью «встроенного объекта» вы можете сделать следующее:
coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object
Это позволит вам выбрать только «встроенные объекты», которые вам нужны.
Таким образом, мне не нужновыделить весь родительский объект ...
С MongoDB дело в том, что родительский документ всегда выбран.Запросы возвращают документы верхнего уровня.Это запекается во всей архитектуре.Даже если вы запрашиваете только часть документа, сервер все равно должен загрузить весь документ в память, прежде чем отправлять вам запрошенный фрагмент.
Единственным способом решения этой проблемы может быть новая Aggregation Framework , но это еще не в стабильной ветке.