MongoDb updateMany()具有不同的$ set对象

时间:2018-03-17 12:16:52

标签: javascript node.js database mongodb nosql

我正在开发一个迁移功能,需要在一定的时间间隔内检索足球比赛结果,并更新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();

0 个答案:

没有答案