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 }
)