我正在使用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'})
吗?
答案 0 :(得分:1)
您可以利用$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
想法是将对象分解为数组,对其进行过滤,然后将该数组转换回对象。
我对city
进行了过滤,但是我确定您知道这个主意。