C'est le comportement du filtrage d'un document intégré à plusieurs niveaux, normalement le filtre correspondant renverrait le document entier, pas les sous-ensembles.
Généralement positional operator $
utilisé pour faire correspondre les sous-documents dans les updates
. Mais la fonctionnalité n'est pas encore implémentée dans les spécificateurs de retour.
Il existe déjà un problème en suspens dans mongo Prise en charge de l'opérateur positionnel ($) dans les champs pour renvoyer le spécificateur . (Veuillez vous connecter pour voter si vous avez vraiment besoin de cette fonctionnalité)
Vous devez donc redéfinir votre schéma pour gérer cela, peut-être comme ça
db.test.insert({"person" : [ { "id":1, "details" : { "name" : "Aswini", "Age" : 10 }}]})
db.test.insert({"person" : [ { "id":2, "details" : { "name" : "Mahesh", "Age" : 11}}]})
db.test.find({"person.id":1},{'person.details':1})