我有一个排除字段的查询;但是,如果它们是空的,我只想排除它们。目前我有:
var query = Recipe.find({'sites': site})
.select('-data.coupons');
如果匹配此条件,我只想排除所选字段'-data.coupons'
:.where({ 'data.coupons': {$exists: true, $not: {$size: 0}} });
如果'-data.coupons'
字段与条件匹配,是否有条件有条件地排除该字段?
答案 0 :(得分:0)
无法从查询中有条件地排除非_id字段。如果您尝试这样做,mongo shell将返回以下错误:
顶级_id字段是目前唯一支持的字段 排除
您可以查看$project运营商的文档。
但你可以尝试使用聚合:
Recipe.aggregate([
{$match: {'sites': site}},
{$project:{
data.coupons:{$cond:[ { '$eq': [ '$data.coupons', [] ] }, [], '$data.coupons' ]}
}},
],function(err, recipes){
if(err){
throw err
}else{
//remove all data.coupons that have value equal to 0
}
});
查询将返回data.coupons,但如果满足条件,则将其值设置为空数组。然后,您可以删除长度等于0的data.coupons字段。