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