我试图从预订汇总中排除某些字段。
{ “用户”: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
})
答案 0 :(得分:1)
您必须在汇总管道中的$project
阶段内使用字段排除/包含。
在旁注上,当您需要添加新字段/覆盖字段时使用$addFields
,并在要限制字段时使用$project
。
来自文档,
$ addFields阶段相当于显式的$ project阶段 指定输入文档中的所有现有字段并添加新字段 字段。