2017-04-11 33 views
5

我创建一个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删除行,我会在后续行中得到“$ accum accumulator是一元运算符”。我在网上找不到这个错误的描述。我的sintax有什么问题?

回答

9

arithmetic operators不能用作$groupaccumulators。他们移动到另一个$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"] }, 
     } 
    } 
]) 
+2

好的,谢谢,我刚才已经意识到,他们所使用的“一元运算符”为“集团经营者”相反。 “$ multiply不是一个组操作员”的消息会更清晰。 – Pino