Mongoose查询有条件地排除字段

时间:2015-10-08 18:16:01

标签: node.js mongodb mongoose

我有一个排除字段的查询;但是,如果它们是空的,我只想排除它们。目前我有:

var query = Recipe.find({'sites': site})
            .select('-data.coupons');

如果匹配此条件,我只想排除所选字段'-data.coupons'.where({ 'data.coupons': {$exists: true, $not: {$size: 0}} });

如果'-data.coupons'字段与条件匹配,是否有条件有条件地排除该字段?

1 个答案:

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