Vous pouvez utiliser le $objectToArray
(mongoDB 3.4.4 et versions ultérieures), $filter et $project
et obtenez quelque chose comme ceci :
db.collection.aggregate([
{
$project: {
obj: {
$objectToArray: "$info"
}
}
},
{
$project: {
_id: 0,
obj: {
$filter: {
input: "$obj",
as: "item",
cond: {
$eq: [
"$$item.v.city",
"NY"
]
}
}
}
}
},
{
$project: {
info: {
$arrayToObject: "$obj"
}
}
},
])
Vous pouvez le voir fonctionner ici
L'idée est de décomposer l'objet en tableau, de le filtrer, puis de reconvertir ce tableau en objet.
J'ai filtré sur city
mais je suis sûr que vous avez compris.