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