假设我有三个模特:
1-项目.,target_countries
2-自由职业者.国家
3-国家.
现在我们有搜索项目页面,自由职业者可以申请项目/工作,而不是匹配他们的位置。我们有两个条件:
如果项目所有者瞄准了某些国家,那么我们将对照target_locations检查自由职业者的位置.
2-如果所有者没有设置target_locations,那么我们跳过这个过滤器,这样每个人都可以看到项目。
我需要使用聚合(而不是找到)
这是我尝试过的,但没有运气,代码样本
样本输入: freelancerCountryID= 61c9d2753be49339489583b8
输出:主MongoError:未知顶层操作符:$cond。如果您的字段名以“$”符号开头,请考虑使用$getField或$setField。
发布于 2022-04-03 19:12:39
在深入研究之后,我找到了正确语法的解决方案。
使用$expr在$cond之上,因为我们处于$match状态
$match:{
$expr:{
$cond: {
if: {
$and:[ {$eq: [ '$countryFilterIsActive', "ACTIVE" ]}, {$isArray:'$target_locations'} ]
},
then: { $in: [mongoose.Types.ObjectId(freelancerLocationID),'$target_locations'] },
else: {}
}
}}
https://stackoverflow.com/questions/71725934
复制相似问题