使用 $in

问题描述 投票:0回答:2

我无法过滤只有特定作用的项目:

当我尝试仅使用 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 子句,因为用户可以有多个角色,但我只需要获取满足角色的项目

c# mongodb webapi
2个回答
0
投票

试试这个:

db.collection.aggregate([
   { $match: { "items.roles": "ROL_CONTADOR" } },
   {
      $set: {
         items: {
            $filter: {
               input: "$items",
               cond: { $in: ["ROL_CONTADOR", "$$this.roles"] }
            }
         }
      }
   }
])

Mongo 游乐场


0
投票

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"] }] } } } } ])

© www.soinside.com 2019 - 2024. All rights reserved.