Du måste använda insert_many
metod och ställ in det beställda alternativet till False
.
db_stock.insert_many(<list of documents>)
Som nämnts i den beställda alternativ dokumentation:
beställd (valfritt):Om True (standard) dokument kommer att infogas seriellt på servern, i angiven ordning. Om ett fel uppstår avbryts alla återstående infogningar. Om False, kommer dokument att infogas på servern i godtycklig ordning, eventuellt parallellt, och alla dokumentinfogningar kommer att göras.
Vilket betyder att insättningen kommer att fortsätta även om det finns ett dubblettnyckelfel.
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 infogades i samlingen.
Det är värt att notera att detta också är möjligt i skalet med hjälp av insertMany
metod. Allt du behöver är att ställa in det odokumenterade alternativet ordered
till false
.
db.collection.insertMany(
[
{ '_id': 2 },
{ '_id': 3 },
{ '_id': 4 },
{ '_id': 5 }
],
{ 'ordered': false }
)