我无法过滤只有特定作用的项目:
当我尝试仅使用 rol ROL_CONTADOR 过滤元素时,返回项目的所有元素,但项目中的第二个元素不应该过滤。
db.menu.find({ "items": { "$elemMatch": { "roles": {$in: ["ROL_ARTICULOS"] } } } })
{
"label": "Reportes",
"icon": "list",
"items": [
{
"label": "Cajas",
"link": "/articulos",
"icon": "check_circle_outline",
"roles": [
"SYSADMIN",
"ROL_CONTADOR"
]
},
{
"label": "Ventas",
"link": "/articulos",
"icon": "check_circle_outline",
"roles": [
"SYSADMIN",
"ROL_VENTAS"
]
}
]
},
{
"label": "Facturas",
"icon": "list",
"items": [
{
"label": "Administración",
"link": "/articulos",
"icon": "check_circle_outline",
"roles": [
"SYSADMIN",
"ROL_FACTURAS"
]
}
]
}
我必须使用 $in 子句,因为用户可以有多个角色,但我只需要获取满足角色的项目
试试这个:
db.collection.aggregate([
{ $match: { "items.roles": "ROL_CONTADOR" } },
{
$set: {
items: {
$filter: {
input: "$items",
cond: { $in: ["ROL_CONTADOR", "$$this.roles"] }
}
}
}
}
])
db.collection.aggregate([ { $match: { "items.roles": { $in: [ "ROL_CONTADOR", "ROL_FACTURAS", "ROL_VENTAS"] } } }, { $set: { items: { $filter : { 输入: "$items", cond: { $or: [ { $in: [ "ROL_CONTADOR", "$$this.roles"] }, { $in: [ "ROL_FACTURAS", "$$this.roles "] }, { $in: [ "ROL_VENTAS", "$$this.roles"] }] } } } } ])