Vous devez utiliser insert_many
méthode et définissez l'option ordonnée sur False
.
db_stock.insert_many(<list of documents>)
Comme mentionné dans la commande documentation des options :
commandé (optionnel) :Si Vrai (valeur par défaut) les documents seront insérés sur le serveur en série, dans l'ordre indiqué. Si une erreur se produit, toutes les insertions restantes sont abandonnées. Si False, les documents seront insérés sur le serveur dans un ordre arbitraire, éventuellement en parallèle, et toutes les insertions de documents seront tentées.
Ce qui signifie que l'insertion se poursuivra même en cas d'erreur de clé en double.
Démo :
>>> 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}]
Comme vous pouvez le voir document avec _id
4, 5 ont été insérés dans la collection.
Il convient de noter que cela est également possible dans le shell en utilisant le insertMany
méthode. Tout ce dont vous avez besoin est de définir l'option non documentée ordered
à false
.
db.collection.insertMany(
[
{ '_id': 2 },
{ '_id': 3 },
{ '_id': 4 },
{ '_id': 5 }
],
{ 'ordered': false }
)