MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment continuer l'insertion après une erreur de clé en double à l'aide de PyMongo

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