我正在使用 javascript 和 mongoose 模块。 我有一个这样的对象
my_object = {
ShopName: String,
employees: [String],
info: {
NameEmployee_1: {
age: String,
work: String,
city: String,
},
NameEmployee_2: {
age: String,
work: String,
city: String,
}
}
}
我想要 查找所有具有特定年龄的员工,但不知道员工的姓名,有办法做到这一点吗?
我知道你例如我可以这样
db.collection.find({'info.Max': {$exists: true}})
查找所有至少有一名名为 Max 的员工的商店 但如果我想要所有至少有一名 33 岁员工的商店怎么办
db.collection.find({'info.<name>.age': '33'})
?
最佳答案
您可以使用$objectToArray (mongoDB 3.4.4 及更高版本),$filter和 $project
并得到如下内容:
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"
}
}
},
])
可以看到working here
这个想法是将对象分解为数组,对其进行过滤,然后将该数组转换回对象。
我过滤了城市
,但我相信您明白了。
关于javascript - 如何在不知道mongodb中的父键的情况下查找特定的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56347376/