Pin*_*ino 7 mongodb aggregation-framework
我正在创建一个MongoDB聚合管道,我在这个阶段陷入困境:
$group: {
_id: {checkType: "$_id.checkType", resultCode: "$_id.resultCode"},
count: { $sum: "$count" },
ctv: { $sum: "$ctv" },
perc:{$multiply:[{$divide:["$ctv","$count"]},100]},
weight: { $divide: [ "$ctv", "$count"] },
details: { $push: "$$ROOT" }
}
Run Code Online (Sandbox Code Playgroud)
它给出错误"$ multiply accumulator是一元运算符".类似地,如果我用$ multiply删除该行,则在后续行中得到"$ divide accumulator是一元运算符".我在网上找不到这个错误的描述.我的sintax有什么问题?
chr*_*dam 14
该算术运算符不能用作蓄电池.将它们移动到另一个管道阶段:$group $project
db.collection.aggregate([
{ "$group": {
"_id": { "checkType": "$_id.checkType", "resultCode": "$_id.resultCode" },
"count": { "$sum": "$count" },
"ctv": { "$sum": "$ctv" },
"details": { "$push": "$$ROOT" }
} },
{ "$project": {
"count": 1,
"details": 1,
"ctv": 1,
"perc": { "$multiply": [ { "$divide": ["$ctv","$count"] }, 100 ] },
"weight": { "$divide": ["$ctv", "$count"] },
} }
])
Run Code Online (Sandbox Code Playgroud)
要么
如果使用MongoDB 3.4及以上版本,请使用$addFields而不是$project
db.collection.aggregate([
{ "$group": {
"_id": { "checkType": "$_id.checkType", "resultCode": "$_id.resultCode" },
"count": { "$sum": "$count" },
"ctv": { "$sum": "$ctv" },
"details": { "$push": "$$ROOT" }
} },
{ "$addFields": {
"perc": { "$multiply": [ { "$divide": ["$ctv","$count"] }, 100 ] },
"weight": { "$divide": ["$ctv", "$count"] },
} }
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7251 次 |
| 最近记录: |