【问题标题】:Mongoose filter subdocumentsMongoose 过滤子文档
【发布时间】:2019-07-13 11:42:02
【问题描述】:

具有类似的架构:

     {
  "_id": ObjectId("..."),
  "views": [
    {
      "name": "AAA",
      "permissions": ['PERM_1','PERM_2']
    },
    {
      "name": "BBB",
      "permissions": ['PERM_2']
    },
    {
      "name": "CCC",
      "permissions": ['PERM_3']
    }]
}

我想获得包含“PERM_1”和“PERM_3”的视图的结果,如下所示:

{
 "_id": ObjectId("..."),
 "views": [
        {
  "name": "AAA",
  "permissions": ['PERM_1','PERM_2']
 },
 {
   "name": "CCC",
   "permissions": ['PERM_3']
 }]
}

但是,我并没有真正成功地得到我想要的结果。这是我的查询:

Schema.aggregate([
{
    $project: {
        views: {
            $filter: {
                input: '$views.permissions',
                as: 'perm',
                cond: {
                    ????? // return only PERM_1 and PERM_3
                }
            }
        }
    }
}])

感谢您的帮助。

【问题讨论】:

    标签: mongodb mongoose nosql aggregation-framework


    【解决方案1】:

    条件内容可以是:

    $filter: {
      input: '$views',
      as: 'perm',
      cond: {
        cond: {
              $gt: [
                {
                  $size: {
                    $setIntersection: ['$$perm.permissions',['PERM_1','PERM_2']],
                  },
                },
                0,
              ],
            },
      }
    }
    

    您可以查看 mongo 技术文档了解更多详情

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 2020-05-02
      • 2018-01-26
      • 2023-03-20
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多