我正在开发一个迁移功能,需要在一定的时间间隔内检索足球比赛结果,并更新MongoDB中那些游戏的现有投注文件。这个代码将在一天内被多次调用,我正在寻找关于计算性能的优化解决方案
数据结构如下所示。
{
"games": {
"2324754": {
"id": "2324754",
"comp_id": "1005",
"formatted_date": "14.03.2018",
"localteam_name": "Barcelona",
"localteam_score": "3",
"visitorteam_name": "Chelsea",
"visitorteam_score": "0"
},
"2324756": {
"id": "2324756",
"comp_id": "1005",
"formatted_date": "14.03.2018",
"localteam_name": "Beşiktaş",
"localteam_score": "1",
"visitorteam_name": "Bayern München",
"visitorteam_score": "3",
}
},
"bets": [
{
"_id": "5aa9535c6c4f437de713452a",
"match_id": "2324756"
},
{
"_id": "5aacf9605c41bc0b3db304fd",
"match_id": "2324754"
}
]
}
一个选项是迭代bets数组并在单个投注文档上调用findOneAndUpdate()
。由于性能问题对于计数为150-200个元素的bets数组而言效果不佳。
问题是可以通过updateMany()
操作实现此迁移。
查询具有给定match_id
的所有文档不会有问题,但如何为updateMany()
构建设置条件?
本文档中的示例假定多个文档的所需字段使用相同的值进行更新。 https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/
更新
另一种选择是创建批量操作并在for循环中执行findOneAnUpdate()
。但是我再次确定这是不是足够高效。任何人都可以确认这将是他的最佳/唯一选择吗?至少不会加载具有多个更新请求的mongo服务器。
https://docs.mongodb.com/manual/reference/method/Bulk.find.update/
var bulk = db.items.initializeUnorderedBulkOp();
//Iterate Bets
//findOneAnUpdate
bulk.execute();