节点js使用流数据更新mongodb集合

时间:2019-05-13 16:31:20

标签: node.js mongodb

在一个nodejs脚本中,我以用户名及其分数的形式接收流中的数据。我想执行一些聚合函数,例如count,max,min,并存储在mongodb集合中。这将是我的收藏集,

> db.UserScore.find().pretty()
{
        "_id" : ObjectId("5cd99550dfe3371cb0e38449"),
        "UserName" : "FirstUser",
        "Count" : 48,
        "MinScore" : 30,
        "MaxScore" : 78,
        "AvgScore" : 45
}
{
        "_id" : ObjectId("5cd995e7f290f21cb07b545b"),
        "UserName" : "SecondUser",
        "Count" : 45,
        "MinScore" : 12,
        "MaxScore" : 88,
        "AvgScore" : 35
}
{
        "_id" : ObjectId("5cd99607f290f21cb07b545c"),
        "UserName" : "ThirdUser",
        "Count" : 51,
        "MinScore" : 29,
        "MaxScore" : 63,
        "AvgScore" : 44
}
.......
.......
....... many more user data.

我想知道用流数据管理数据库收集的最佳方法。我可以使用db update来处理流数据中收到的每个条目,

db.UserScore.update(
    {"UserName" : "FirstUser"},
    {$set: { 
            "Count" : 49,
            "MinScore" : 20,
            "MaxScore" : 82,
            "AvgScore" : 46
           }});

但是我认为,这不是一个好主意,因为收到的每一行都会更新集合,这可能会导致严重的性能问题或CPU密集型活动。请建议我一些更好的方法来执行相同的操作。

我用Google搜索并发现mongodb collection监视并更改了流功能,但这是从db collection到node.js,我想先从node.js到db collection。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以将多个更新排在一起,然后使用bulkWrite在一个查询中发送所有更新。