Bạn có thể sử dụng $ objectToArray
(mongoDB 3.4.4 trở lên), $ filter và $project
và nhận được một cái gì đó như thế này:
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"
}
}
},
])
Bạn có thể thấy nó hoạt động tại đây
Ý tưởng là chia đối tượng thành mảng, lọc nó và sau đó chuyển đổi mảng đó trở lại đối tượng.
Tôi đã lọc trên city
nhưng tôi chắc chắn rằng bạn hiểu được ý tưởng.