Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:使用$divide和$multiply时出错_Mongodb_Aggregation Framework - Fatal编程技术网

MongoDB:使用$divide和$multiply时出错

MongoDB:使用$divide和$multiply时出错,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我正在创建一个MongoDB聚合管道,我被困在这个阶段: $group: { _id: {checkType: "$_id.checkType", resultCode: "$_id.resultCode"}, count: { $sum: "$count" }, ctv: { $sum: "$ctv" }, perc:{$multiply:[{$divide:["$ctv","$co

我正在创建一个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累加器是一元运算符”。我在网上找不到这个错误的描述。我的sintax有什么问题?

不能用作。将它们移动到另一个管道阶段,如下所示:

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及以上版本,请使用而不是

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不是一个组运算符”,那就更清楚了。在组操作中,不只是为了在组级别进行乘法而添加字段,而是简单地求和然后进行乘法,不是更容易吗?e、 类似于{$sum:{$multiply:[“$ctv”,“$count”]}