[英]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.