sql >> Databáze >  >> NoSQL >> MongoDB

Jak pokračovat ve vkládání po chybě duplicitního klíče pomocí PyMongo

Musíte použít insert_many metodu a nastavte uspořádanou možnost na False .

db_stock.insert_many(<list of documents>)

Jak je uvedeno v objednávce dokumentace volitelného příslušenství:

objednáno (volitelné):Pokud True (výchozí) dokumenty budou vkládány na server sériově, v uvedeném pořadí. Pokud dojde k chybě, všechny zbývající vložky se přeruší. Pokud je False, dokumenty budou na server vkládány v libovolném pořadí, případně paralelně, a bude proveden pokus o vložení všech dokumentů.

Což znamená, že vkládání bude pokračovat, i když dojde k chybě duplicitního klíče.

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

Jak můžete vidět dokument s _id 4, 5 byly vloženy do sbírky.

Stojí za zmínku, že je to také možné v shellu pomocí insertMany metoda. Vše, co potřebujete, je nastavit nezdokumentovanou možnost ordered na false .

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


  1. Jak na to:Použijte rozhraní Apache HBase REST, část 1

  2. Jak používat Elasticsearch s MongoDB?

  3. Jak nainstalovat MongoDB 4.2 na systémy RedHat/CentOS 7

  4. Pokus o spuštění redis a resque plánovače v rámci úlohy rake