Отговорих на това няколко пъти относно събирането на поддокументите само от колекцията mongo тук , и тук
Просто няма начин да направите това в момента. Това е поведението на филтриране на многостепенен вграден документ, обикновено съвпадащият филтър би върнал целия документ, а не подгрупите.
Вече има два нерешени проблема в mongo, свързани с този позиционен ($) оператор в полета за връщане на спецификатора и Възможност за използване на данни от поддокумент, чието съдържание е използвано за удовлетворяване на заявка с помощта на оператора $ . (Моля, влезте, за да гласувате, ако наистина имате нужда от функцията)
И вашата алтернативна схема също не е полезна тук.
така че трябва да съхранявате всяка функция в отделен документ като този, за да работи по желания от вас начин
характеристика 1
{
'_id': SomeObjectId,
'name' :'some name',
'value': 'feature 1',
'some_field' : 'zzz'
}
характеристика 2
{
'_id': SomeObjectId,
'name' :'some name',
'value': 'feature 2',
'some_field' : 'zzz'
}
и запитване
db.features.find({'_id':someobjectid})
ще върне само конкретната функция