Ho risposto un paio di volte sul ritiro dei documenti secondari da mongo collection qui e qui
Semplicemente non c'è modo di farlo attualmente. Questo è il comportamento del filtraggio di documenti incorporati a più livelli, normalmente il filtro corrispondente restituirebbe l'intero documento, non i sottoinsiemi.
Ci sono già due problemi in sospeso in mongo relativi a questo operatore posizionale ($) nei campi per restituire lo specificatore e Possibilità di utilizzare i dati di un documento secondario il cui contenuto è stato utilizzato per soddisfare una query utilizzando l'operatore $ . (Accedi per votare se hai davvero bisogno della funzione)
E anche il tuo schema alternativo non è utile qui.
quindi devi archiviare ciascuna funzionalità in un documento separato come questo per farlo funzionare nel modo desiderato
caratteristica 1
{
'_id': SomeObjectId,
'name' :'some name',
'value': 'feature 1',
'some_field' : 'zzz'
}
caratteristica 2
{
'_id': SomeObjectId,
'name' :'some name',
'value': 'feature 2',
'some_field' : 'zzz'
}
e interrogare
db.features.find({'_id':someobjectid})
restituirà solo la caratteristica specifica