2015-02-11 130 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