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

PyMongoを使用して重複キーエラーの後に挿入を続行する方法

    insert_manyを使用する必要があります メソッドを実行し、順序付けされたオプションをFalseに設定します 。

    db_stock.insert_many(<list of documents>)
    

    注文で述べたように オプションのドキュメント:

    注文 (オプション):True(デフォルト)の場合、ドキュメントは指定された順序でサーバーにシリアルに挿入されます。エラーが発生した場合、残りのすべての挿入は中止されます。 Falseの場合、ドキュメントは任意の順序で、場合によっては並行してサーバーに挿入され、すべてのドキュメントの挿入が試行されます。

    つまり、重複キーエラーが発生しても挿入は続行されます。

    デモ:

    >>> c.insert_many([{'_id': 2}, {'_id': 3}])
    <pymongo.results.InsertManyResult object at 0x7f5ca669ef30>
    >>> list(c.find())
    [{'_id': 2}, {'_id': 3}]
    >>> try:
    ...     c.insert_many([{'_id': 2}, {'_id': 3}, {'_id': 4}, {'_id': 5}], ordered=False)
    ... except pymongo.errors.BulkWriteError:
    ...     list(c.find())
    ... 
    [{'_id': 2}, {'_id': 3}, {'_id': 4}, {'_id': 5}]
    

    ご覧のとおり、_idのドキュメントをご覧ください 4、5がコレクションに挿入されました。

    これは、insertManyを使用するシェルでも可能であることに注意してください。 方法。必要なのは、文書化されていないオプションorderedを設定することだけです falseに 。

    db.collection.insertMany(
        [ 
            { '_id': 2 }, 
            { '_id': 3 },
            { '_id': 4 }, 
            { '_id': 5 }
        ],
        { 'ordered': false }
    )
    


    1. セッションの期限切れベースのredisを処理する方法は?

    2. Redisの更新は同期していますか?

    3. MongoDB-ファイルサイズは巨大で大きくなっています

    4. 非同期関数node.jsからの戻り値