7

まず、ドキュメント一致クエリが存在するかどうかを確認します。

その場合は、そのドキュメントを新しいデータで更新します。

それ以外の場合は、データベースに新しいドキュメントを挿入します。

4

3 に答える 3

14

trueに等しい「upsert」を使用できます。次に、「upsert」をtrueとして実行する更新クエリは、必要な処理を正確に実行します。

  • 存在する場合は更新します。
  • 存在しない場合はnewを挿入します。

MongoDbドキュメントから:

db.collection.update( criteria, objNew, upsert, multi )

Arguments:

    criteria - query which selects the record to update;
    objNew - updated object or $ operators (e.g., $inc) which manipulate the object
    upsert - if this should be an "upsert"; that is, if the record does not exist, insert it
    multi - if all documents matching criteria should be updated

http://www.mongodb.org/display/DOCS/Updating

例:

db.test.update({"x": "42"}, {"$set": {"a": "21"}},True)    
#True => Upsert is True

こちらの「更新」ドキュメントを参照してください。

http://api.mongodb.org/python/current/api/pymongo/collection.html

于 2011-07-15T06:21:21.913 に答える
2

http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.update

upsert=Trueを設定します

于 2011-07-15T06:21:38.673 に答える
0

完全なテスト例。$ setOnInsertも参照してください。これは、キーが存在する場合、$setとは異なりレコードを変更しません。

payload= {'id':'key123','other':'stuff'}
collection.update({'eventid':payload['id']}, {"$set": payload}, upsert=True)
collection.count_documents({}) # 1

payload= {'id':'key123','other':'stuff2'}
collection.update({'eventid':payload['id']}, {"$set": payload}, upsert=True)
collection.count_documents({}) # 1

payload= {'id':'key456','other':'more stuff'}
collection.update({'eventid':payload['id']}, {"$setOnInsert": payload}, upsert=True)
collection.count_documents({}) # 2

payload= {'id':'key456','other':'more stuff2'}
collection.update({'eventid':payload['id']}, {"$setOnInsert": payload}, upsert=True)
collection.count_documents({})
于 2020-01-17T21:48:02.063 に答える