Este é o comportamento da filtragem de documentos embutidos em vários níveis, normalmente o filtro correspondente retornaria o documento inteiro, não os subconjuntos.
Normalmente
positional operator $
usado para combinar os subdocumentos em updates
. Mas o recurso ainda não foi implementado nos especificadores de retorno. Já existe um problema pendente no mongo Suporte para operador posicional ($) em campos para retornar especificador . (Por favor, faça o login para votar se você realmente precisava do recurso)
Então você tem que redesenhar seu esquema para lidar com isso, pode ser assim
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})