sql >> Database >  >> NoSQL >> MongoDB

Doorgaan met invoegen na dubbele sleutelfout met PyMongo

U moet insert_many . gebruiken methode en stel de bestelde optie in op False .

db_stock.insert_many(<list of documents>)

Zoals vermeld in de bestelde optie documentatie:

besteld (optioneel):Als True (de standaard) documenten serieel op de server worden ingevoegd, in de aangegeven volgorde. Als er een fout optreedt, worden alle resterende invoegingen afgebroken. Indien False, worden documenten in willekeurige volgorde op de server ingevoegd, mogelijk parallel, en wordt geprobeerd alle documenten in te voegen.

Wat betekent dat het invoegen doorgaat, zelfs als er een dubbele sleutelfout is.

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

Zoals je kunt zien document met _id 4, 5 werden toegevoegd aan de collectie.

Het is vermeldenswaard dat dit ook mogelijk is in de shell met behulp van de insertMany methode. Het enige wat je nodig hebt is de ongedocumenteerde optie ordered naar false .

db.collection.insertMany(
    [ 
        { '_id': 2 }, 
        { '_id': 3 },
        { '_id': 4 }, 
        { '_id': 5 }
    ],
    { 'ordered': false }
)


  1. ScaleGrid volledig beheerde hosting voor Redis™ nu beschikbaar op Azure

  2. MongoDB installeren op CentOS 8

  3. Hoe in MongoDB slechts een deel van de array retourneren?

  4. Mongodb:kon geen verbinding maken met 127.0.0.1:27017, reden:errno:10061