2017-06-09 14 views
1

誰でも教えてください。MongoDBのDuplicateKeyErrorMongoDB(pyMongo)でDuplicateKeyErrorを処理する方法は?

私は2つの異なるコレクションからいくつかのドキュメントを3番目に移動するpythonスクリプトを書いています。いくつかの同一のドキュメント(同一のObjectIdを持つ)があるため、2つのコレクションの間に小さなオーバーラップがあります。これは、次のような結果になります。

DuplicateKeyError: E11000 duplicate key error collection: admin.collection_test index: id dup key: { : ObjectId('593a920b529e170d4b8fbf72') }

私が使用してエラーを取り除くために:

try: 
    do something 
except pymongo.errors.DuplicateKeyError: 
    pass 

私は「しようと-以外」にすべての非交差文書を移動するための使用により期待します3番目のコレクションではなく、最初の重複(コレクション内の既存のドキュメント)が表示されたら、スクリプトは正常に動作しなくなります。 多くのヘルプに感謝します!

+0

このコレクションのObjectIdは別のドキュメント用に既に存在しています – Anupam

答えて

2
for doc in documents: 
    client.update_one({'_id': doc['_id']}, doc, upsert=True) 

あなたはアップサート=真でupdate_oneを使用することができます。これは、docがすでに存在する場合は新しいdocを使用してdocを更新し、それ以外の場合は新しいdocを作成します。

3

文書を反復処理する場合は、passの代わりにcontinueを使用してみてください。

for doc in documents: 
    try: 
     # insert into new collection 
    except pymongo.errors.DuplicateKeyError: 
     # skip document because it already exists in new collection 
     continue 
関連する問題