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