2014-01-07 23 views
4

我收集了一些推文。我想在此集合中插入推文列表。新的列表中也可能有一些重複的推文,我想確保重複的推文不會被寫入,但其餘的都是。爲了達到這個目的,我使用下面的代碼。Pymongo w = 1 with continue_on_error

mongoPayload = <list of tweets> 
committedTweetIDs = db.tweets.insert(mongoPayload, w=1, continue_on_error=True) 
print "%d documents committed" % len(committedTweetIDs) 

上面的代碼片段應該工作。但是,我得到的行爲是第二​​行生成DuplicateKeyError。我不知道這是怎麼回事,我提到了continue_on_error。

我最終想要的是讓Mongo提交所有非重複的文檔並返回給我(作爲確認)寫入日誌的所有文檔的tweetIDs。

+0

第二行是無效的Python。您不能在關鍵字參數('SyntaxError')之後放置位置參數。你能告訴我們線路真的是什麼樣子嗎?如果你正在做'continue_on_error = some_variable',你確定'some_variable'是真的嗎? – dirn

+0

對不起,是的。 'continue_on_error = True應該在那裏。我的錯。 – VaidAbhishek

回答

6

即使有continue_on_error=True,如果MongoDB告訴它你試圖插入一個帶有重複_id的文檔,PyMongo會引發一個DuplicateKeyError。但是,對於continue_on_error=True,服務器已嘗試將中的所有文檔插入列表中,而不是在第一個錯誤上中止操作。異常的error_document屬性告訴您在文檔列表中最後重複_id

不幸的是,當您執行批量插入時,您無法確定總共有多少個文檔成功並失敗。 MongoDB 2.6 and PyMongo 2.7 will address this in the next release當我們實施批量寫入操作。

+0

謝謝。是的,我看到2.6的發行說明,並且寫道用戶可以更好地控制散裝插入和故障條件。 – VaidAbhishek