簡體   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