Musíte použít insert_many
metodu a nastavte uspořádanou možnost na False
.
db_stock.insert_many(<list of documents>)
Jak je uvedeno v objednávce dokumentace volitelného příslušenství:
objednáno (volitelné):Pokud True (výchozí) dokumenty budou vkládány na server sériově, v uvedeném pořadí. Pokud dojde k chybě, všechny zbývající vložky se přeruší. Pokud je False, dokumenty budou na server vkládány v libovolném pořadí, případně paralelně, a bude proveden pokus o vložení všech dokumentů.
Což znamená, že vkládání bude pokračovat, i když dojde k chybě duplicitního klíče.
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}]
Jak můžete vidět dokument s _id
4, 5 byly vloženy do sbírky.
Stojí za zmínku, že je to také možné v shellu pomocí insertMany
metoda. Vše, co potřebujete, je nastavit nezdokumentovanou možnost ordered
na false
.
db.collection.insertMany(
[
{ '_id': 2 },
{ '_id': 3 },
{ '_id': 4 },
{ '_id': 5 }
],
{ 'ordered': false }
)