mongodb聚合(如果条件)-如果为true,则执行过滤器

时间:2019-03-26 12:44:19

标签: mongodb

我正在尝试进行查询,以获取专业和subProfession的数组,并返回具有匹配的专业/ subProfession的所有治疗师

但是,如果专业和subProfssion都为空,则返回所有治疗师。

这是我要获取的逻辑的伪代码:

        professionsFlag = professions.length != 0;
        subProfessionsFlag = subProfessions.length != 0;
        Therapist.aggregate([
            {
                $match: {
                    $cond: {if: professionsFlag || subProfessionsFlag, 
                        then:
                        {$or: [
                            { profession: { $in: professions } },
                            {
                                subProfession: {
                                    $elemMatch: { $in: subProfessions }
                                }
                            }
                        ]}
                    },
                }
            },

此代码失败,并显示unknown top level operator: $cond

为什么这样做正确?

注意:查询的$or部分按预期工作。

1 个答案:

答案 0 :(得分:0)

我最终得到了这段代码:

      let filter = {
            $match: {
                image: { $exists: true, $ne: null },
                'clinic.city': params.place.value
            }
        };

        if ( professions.length != 0 || subProfessions.length != 0) {
            filter.$match.$or =  [
                { profession: { $in: professions } },
                {
                    subProfession: {
                        $elemMatch: { $in: subProfessions }
                    }
                }
            ];
        }

        Therapist.aggregate([
            filter,
        ], callback);