sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan fortsætter du indsættelse efter duplikatnøglefejl ved hjælp af PyMongo

Du skal bruge insert_many metode og indstil den bestilte mulighed til False .

db_stock.insert_many(<list of documents>)

Som nævnt i den bestilte option dokumentation:

bestilt (valgfrit):Hvis True (standard) dokumenter vil blive indsat på serveren serielt i den angivne rækkefølge. Hvis der opstår en fejl, afbrydes alle resterende indsættelser. Hvis False, vil dokumenter blive indsat på serveren i vilkårlig rækkefølge, muligvis parallelt, og alle dokumentindsættelser vil blive forsøgt.

Hvilket betyder, at indsættelsen fortsætter, selvom der er en duplikatnøglefejl.

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

Som du kan se dokument med _id 4, 5 blev indsat i samlingen.

Det er værd at bemærke, at dette også er muligt i skallen ved hjælp af insertMany metode. Alt du behøver er at indstille den udokumenterede mulighed ordered til false .

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


  1. Hvad er de tilfælde, hvor Redis foretrækkes frem for Aerospike?

  2. Redis AOF fsync (ALTID) vs. LSM-træ

  3. Gendan en MongoDB-database ved hjælp af mongorestore

  4. Sådan opretter du forbindelse til ElastiCache-klyngen ved hjælp af node.js