在一个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。
谢谢