【问题标题】:MongoDB: error with $divide and $multiplyMongoDB:$divide 和 $multiply 出错
【发布时间】:2017-09-06 14:25:09
【问题描述】:

我正在创建一个 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" }
        }

它给出错误“$multiply 累加器是一元运算符”。同样,如果我用 $multiply 删除该行,我会在下一行得到“$divide 累加器是一元运算符”。我在网上找不到这个错误的描述。我的语法有什么问题?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    arithmetic operators 不能用作 $group accumulators。将它们移动到另一个 $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"] },
        } }
    ])
    

    如果使用 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"] },
        } }
    ])
    

    【讨论】:

    • 好的,谢谢,我刚刚意识到他们使用“一元运算符”作为“组运算符”的相反。一条消息说“$multiply 不是组运算符”会更清晰。
    • 而不是 addFields 只是在组级别相乘,这样求和然后在组操作中相乘不是更容易吗?例如像 { $sum: { $multiply: ["$ctv", "$count"] } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2021-08-31
    • 1970-01-01
    • 2019-04-06
    • 2020-05-04
    • 1970-01-01
    相关资源
    最近更新 更多