繁体   English   中英

如何使用批量操作更新mongdb中的文档?

[英]How to update documents in mongdb using bulk operation?

我正在尝试使用python和龙卷风访问单个函数内的单个表。

根据我上一个问题的建议,我尝试使用mongodb可用的Bulk操作来这样做。 我的插入尝试成功,但是在更新期间出现错误。

我的代码是

bulk = db.Test.initialize_unordered_bulk_op()
print("1")
bulk.insert({"test":"we"})
# bulk.find({"test": "we"})
bulk.update({"test": "we"},{'$set':{"test": "false"}},{'$unset':{"Cid"}})
t = bulk.execute()
print(t)

查询中有问题吗?

当尝试打印find操作的答案时,

<tornado.concurrent.Future object at 0x02ED2630>

谁能指导我如何进行此批量操作。

您需要.find()您想要的.update()

bulk.find({"test": "we"}).update({'$set': {"test": "false"}, '$unset': {"Cid", ""}})

另外,您只需使用.find方法即可返回集合中的文档,该方法返回一个Cursor对象。 然后,您将需要遍历光标或使用list来返回文档。 话虽这么说,如果知道您的查询将仅返回一个文档,那么您需要的是.find_one()方法。

在打印时, bulk.find的结果没有任何意义,因为您正在插入文档,并使用相同的BulkOperationBuilder实例进行BulkOperationBuilder ,这意味着所有操作都将在.execute()之后发送到服务器。

如果您使用的是Motor,则需要“屈服”由bulk.execute返回的Future,以等待其完成并获得结果:

@gen.coroutine
def f():
    bulk = db.Test.initialize_unordered_bulk_op()
    print("1")
    bulk.insert({"test":"we"})
    # bulk.find({"test": "we"})
    bulk.update({"test": "we"},{'$set':{"test": "false"}},{'$unset':{"Cid"}})
    t = yield bulk.execute()
    print(t)

电机是异步的; 为了等待与数据库服务器对话的任何Motor方法完成,您必须将回调传递给该方法,或者让该方法返回Future。

有关更多信息,请参阅教程:

http://motor.readthedocs.org/en/stable/examples/bulk.html#ordered-bulk-write-operations

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM