在mongoose中按键查找嵌套对象



我想在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供您参考。

最新更新