MongoDB排除聚合字段,这可能吗?

时间:2017-04-06 20:57:51

标签: mongodb mongodb-query

我试图从预订汇总中排除某些字段。

{  “用户”:0,  “paymentType”:0,  “_id”:0 }

没有它,效果很好,但有了它,我得到了错误:

assert: command failed: {
    "ok" : 0,
    "errmsg" : "A pipeline stage specification object must contain exactly one field.",
    "code" : 40323,
    "codeName" : "Location40323"
} : aggregate failed

这可以吗,或者我只能用find()吗?

db.getCollection('booking').aggregate([{
    $match: {
        checkin : {$lte: (1512145439)},
        checkout: {$gte: (1483203600)},
    }
}, 
    {
     "user":0, 
     "paymentType":0, 
     "_id":0
    }
, {
    $lookup: {
        from: "users",
        localField: "user",
        foreignField: "_id",
        as: "users"
    }   
}, {
    $unwind: "$user"
}, {
    $addFields: {
        "country": "$users.country"
    }
}, {
    $project: {
        "users": 0
    }    
}, {
    $project: {
        "booking": 0
    }
}])

如果我喜欢这样,它将排除字段:

db.getCollection('booking').find({},        
        {
         "user":0, 
         "paymentType":0, 
         "_id":0
        })

1 个答案:

答案 0 :(得分:1)

您必须在汇总管道中的$project阶段内使用字段排除/包含。

在旁注上,当您需要添加新字段/覆盖字段时使用$addFields,并在要限制字段时使用$project

来自文档,

  

$ addFields阶段相当于显式的$ project阶段   指定输入文档中的所有现有字段并添加新字段   字段。