我正在尝试执行一个查询,以获取专业和子职业数组,并返回具有匹配职业/子职业的所有治疗师
但是,如果职业和子职业的两个数组都是空的,则返回所有治疗师。
这是我尝试获取的逻辑的伪代码:
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
部分按预期工作。
我最终得到了这段代码:
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);