sql >> データベース >  >> NoSQL >> MongoDB

MongodbコレクションとPythonDictをマージします

    以下のコードを試すことができます:

    import pymongo
    from pymongo import UpdateOne
    import json
    import sys
    
    inputArray = [
        {"name": "aaa", "value": 40},
        {"name": "ccc", "value": -100},
        {"name": "ddd", "value": 200},
    ]
    
    bulkArr = []
    
    # Iterate over all dicts in a list & form the query,
    # Here `upsert=True` helps to insert a new doc into collection if there is no match on `{"name": x['name']}`,
    # If there is a match doc will be updated, You can use `$set` or any-other operator depends on your use case.
    for x in inputArray:
        bulkArr.append(
            UpdateOne({"name": x['name']}, {'$inc': {'value': x['value']}}, upsert=True))
    
    # print('[%s]' % ', '.join(map(str, bulkArr)))
    
    try:
        result = db.collection.bulk_write(bulkArr) # Ensure db connection is established by this point
        # Opt for below - if you want to proceed on all dictionaries to be updated, even though an error occured in between for one dict
        # result = db.collection.bulk_write(bulkArr, ordered=False)
        print(result.bulk_api_result)
    except:
        e = sys.exc_info()[0]
        print("An exception occurred ::", e) ## Get the ids failed if any & do re-try
    

    参照: Bulk-write-operations



    1. 単一サーバー上の複数のLaravelアプリケーションのキューにRedisを使用する

    2. MongoDBmongorestoreとレコード付きの既存のコレクション

    3. mongodbは、値を1ずつ増やしてすべてのドキュメントを更新します

    4. ドキュメントデータベース:冗長データ、参照など(特にMongoDB)