Devi usare insert_many
metodo e imposta l'opzione ordinata su False
.
db_stock.insert_many(<list of documents>)
Come menzionato nell'ordinato documentazione dell'opzione:
ordinato (opzionale):Se True (l'impostazione predefinita) i documenti verranno inseriti sul server in serie, nell'ordine fornito. Se si verifica un errore, tutti gli inserimenti rimanenti vengono annullati. Se False, i documenti verranno inseriti nel server in ordine arbitrario, possibilmente in parallelo, e verranno tentati tutti gli inserimenti di documenti.
Ciò significa che l'inserimento continuerà anche se si verifica un errore di chiave duplicata.
Demo:
>>> 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}]
Come puoi vedere, documenta con _id
4, 5 sono stati inseriti nella collezione.
Vale la pena notare che questo è possibile anche nella shell usando insertMany
metodo. Tutto ciò di cui hai bisogno è impostare l'opzione non documentata ordered
a false
.
db.collection.insertMany(
[
{ '_id': 2 },
{ '_id': 3 },
{ '_id': 4 },
{ '_id': 5 }
],
{ 'ordered': false }
)