Mongodb内嵌文档数组数据求和

新手上路,请多包涵

请问如何计算“com”里面所有文档中“a”的和,并且update将这个和当作一个最外层的键保存,是要用js解决吗?我想批量计算,这样的文档有20000多个...

{ 
    "_id" : 3,
    "repos" : { 
        "com" : [ 
            { "a" : 16555, "t" : 141, "d" : 7633 } ,
            { "a" : 14358, "t" : 121, "d" : 7133 } ,
            { "a" : 12356, "t" : 108, "d" : 2137 } ,  
         ], 
         "self" : [ 
             {     
                 "forks_count" : 54, 
                 "id" : 7370053, 
                 "rank_score" : 0.0006762191350350863
             },
             {     
                 "forks_count" : 54, 
                 "id" : 7370053, 
                 "rank_score" : 0.0006762191350350863
             }]
     }
}
阅读 11.2k
2 个回答

使用 Mongodb 的聚合可以实现求和。但是不知道是不是楼主想要的实现方式。

javascriptdb.Collection.aggregate([
    { $unwind: "$repos.com" },
    { $group: { _id: "$_id", update: { $sum : "$repos.com.a" } } }
])

下面是我使用 Robomongo 是操作的例子:
楼主提供的数据
进行聚合求和的结果

这样需要读写的复杂操作,没有直接的数据库查询语言可以使用。聚合可以进行复杂计算,但是只能读数据,写还要自己写代码完成。所以,不如直接随便用你喜欢的语言花10分钟写个程序,20000个文档执行起来最多也就几秒吧…… MongoDB 的驱动都那么容易上手,不成问题啦。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏