2017-04-11 65 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