MongoDB:$ divide和$ multiply错误

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)

  • 好的,谢谢,我刚刚意识到他们使用"一元操作员"作为"组操作员"的反面.一条消息"$ multiply不是一个群组运营商"会更清楚. (2认同)