我有一个查询,其中不包括字段;但是,如果它们为空,我只想排除它们。目前我有:
var query = Recipe.find({'sites': site})
.select('-data.coupons');
我只想排除符合以下条件的所选字段
'-data.coupons'
:.where({ 'data.coupons': {$exists: true, $not: {$size: 0}} });
是否有一种方法只能在有条件的情况下才有条件地排除
'-data.coupons'
字段? 最佳答案
有条件地从查询中排除non__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字段。