MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So setzen Sie das Einfügen nach einem doppelten Schlüsselfehler mit PyMongo fort

Sie müssen insert_many verwenden -Methode und setzen Sie die bestellte Option auf False .

db_stock.insert_many(<list of documents>)

Wie in der bestellt erwähnt Optionsdokumentation:

bestellt (optional):Bei True (Standardeinstellung) werden Dokumente seriell in der angegebenen Reihenfolge auf dem Server eingefügt. Wenn ein Fehler auftritt, werden alle verbleibenden Einfügungen abgebrochen. Wenn False, werden Dokumente in beliebiger Reihenfolge, möglicherweise parallel, auf dem Server eingefügt, und es wird versucht, alle Dokumente einzufügen.

Das bedeutet, dass das Einfügen fortgesetzt wird, selbst wenn ein Fehler wegen doppeltem Schlüssel auftritt.

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

Wie Sie Dokument mit _id sehen können 4, 5 wurden in die Sammlung eingefügt.

Beachten Sie, dass dies auch in der Shell mit insertMany möglich ist Methode. Sie müssen lediglich die undokumentierte Option ordered setzen auf false .

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