Du kan använda $objectToArray
(mongoDB 3.4.4 och senare), $filter och $project
och få något sånt här:
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"
}
}
},
])
Du kan se den fungera här
Tanken är att bryta objektet till array, filtrera det och sedan konvertera arrayen tillbaka till objekt.
Jag filtrerade på city
men jag är säker på att du förstår idén.