如果给定参数,猫鼬聚合过滤器

mongoose aggregate filter if param given

我有一个聚合,其中状态和 ID 在查找管道中匹配。在集合中有一些角色,我从 request.query 获得。如果角色请求为空,我想显示每个数据。但如果它不为空,我只想显示角色所在的数据,例如 'user'。我的代码给出了结果。但是当request.query为空时,不匹配,结果为空。

我怎样才能做到这一点?

我目前的比赛阶段

{
    $match: {
        $and: [
            {
              $expr: { $eq: ["$$id", "$_id"] },
            },
            { status: 1 },
        ],
        $or: [{ role: role }],
    },
},

可以放JS条件,如果role有值则return值否则为空对象,不需要$or运算符,

{
    $match: {
        $and: [
            {
              $expr: { $eq: ["$$id", "$_id"] },
            },
            { status: 1 },
            role ? { role: role } : {}
        ]
    },
},