Mongoose过滤器子文档

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

模式如下:

     {
  "_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个回答
1
投票

条件的内容可以是:

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

您可以查看mongo技术文档以获取更多详细信息

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