我有一个查询,其中不包括字段;但是,如果它们为空,我只想排除它们。目前我有:

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字段。

10-01 03:57