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