我想在mongoose中找到一个基于键的嵌套对象的文档。例如
{
"_id": 1,
"first_name": "Tom",
"email": "tom@example.com",
"ACL": {
123gd: {
read: true,
write: false,
},
3sg2w: {
read: true,
write: false,
}
}
},
{
"_id": 2,
"first_name": "Tom",
"email": "tom@example.com",
"ACL": {
546er: {
read: true,
write: false,
},
98trw: {
read: true,
write: false,
}
}
}
对于上面的示例文档数据,我想编写一个方法来查找并返回仅具有ACL key is 123gd
的文档。这是
{
"_id": 1,
"first_name": "Tom",
"email": "tom@example.com",
"ACL": {
123gd: {
read: true,
write: false,
},
3sg2w: {
read: true,
write: false,
}
}
}
那么我如何用mongoose来查找特定的文档
您可以通过$objectToArray
来实现这一点,将ACL
对象转换为k-v元组的数组。然后您可以使用$anyElementTrue
来检查k
是否为123gd
db.collection.find({
$expr: {
"$anyElementTrue": {
"$map": {
"input": {
"$objectToArray": "$ACL"
},
"as": "kv",
"in": {
$eq: [
"$$kv.k",
"123gd"
]
}
}
}
}
})
这是Mongo Playground供您参考。