使用.limit()和.sort()更新光标中的所有文档

时间:2019-06-15 10:41:55

标签: python mongodb pymongo

我在pymongo中有一个相当复杂的查询,如下所示:

frames = collection.find(
        {
            "inspectionId": inspectionId,
            "timestamp": 
                {
                    "$lt": time.time() - 3600
                }
        }
    ).limit(100).sort('img', 1)

现在,我想更新光标timestamp指向的所有文档中的frames字段。现在,我要遍历光标并为每个文档设置时间戳:

for frame in frames:
    collection.update_one(
        {
            "_id" : frame["_id"]
        },
        {
            "$set" :
                {
                    "timestamp": time.time()
                }
        }
     )

但是,这似乎不太有效,因为它需要花费一些时间。是否有方便的方式一次更新存储在pymongo光标中的所有文档?

修改: 它不是重复的,因为我正在使用.limit().sort(),它们与更新选项{multi: true}不兼容。

1 个答案:

答案 0 :(得分:0)

正如您所说,它们位于pymongo游标中(或数据位于应用程序末尾)。遍历它们,更新框架并进行批量保存调用。

还有一件事我没有得到您的用例。为什么要更新,您选择限制和排序。如果不需要这些,则可以直接使用multi = true

进行更新。