2015-02-11 96 views
0

我想添加一個歸檔文件作爲聚合的結果。MongoDB更新彙總

聚合返回多個項目,但只更新一個。

爲什麼只有一個?

這裏是我的代碼

var maxCount = db.technology.aggregate({ 
    $group: { 
     _id:"$_id", 
      stackMax: { 
      $max:"$stackTimeLine.statistics.count"} 
      } 
    }); 

while(maxCount.hasNext()) { 
    var item=maxCount.next(); 
    db.technology.update(
     {_id:item._id}, 
     {$set: {'stackTimeLine.latest':item.stackMax[0]}} 
    ); 
} 

結果:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) 
+0

刪除結果:真。 db.collection.update( , { 多:真 } )嘗試:db.technology.update( {_id:item._id},{ $設置:{'stackTimeLine.latest ':item.stackMax [0]}},{'multi':true} ); – cehmja 2015-02-11 16:48:33

+0

我試過了,沒有運氣。而且每個更新只應更新一個條目。不需要「多」。 – 2015-02-11 17:42:59

+0

你的聚合並沒有做任何事情。然後,您將字段設置爲其當前值,因此它是無操作的。你能描述一下你想要添加到文檔中嗎? – wdberkeley 2015-02-11 18:22:19

回答

1

聚集結果不是光標,你不能用就可以了hasNext()next()。例如,我的聚集輸出

{ 
    "result" : [ 
     { 
      "_id" : [ 
       "8" 
      ], 
      "count" : 474 
     }, 
     { 
      "_id" : [ 
       "vista" 
      ], 
      "count" : 414 
     }, 
     { 
      "_id" : [ 
       "xp" 
      ], 
      "count" : 5112 
     } 
    ], 
    "ok" : 1 
} 

然後我用forEach()aggregationResult.result

var aggregationResult = db.Collection.aggregate(
[ 
    {$group : {_id : '$ps.d.Name', count : { $sum: 1 }}} 
]); 

aggregationResult.result.forEach(function(item) 
{ 
    print(item); 
}) 

可以在forEach()功能體更新你的物品,而不是print()

+0

我把_print(item._id +''+ item.stackMax [0])_ _var放置在item = ..._之後。所有條目均已打印,但僅更新了1個 – 2015-02-11 20:47:38

0

感謝的that guy解復發現。

在蒙戈外殼聚合的結果沒有財產結果

以前的答案工作正常,如果如果你想你需要添加多多個更新從的forEach