MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak kontynuować wstawianie po błędzie zduplikowanego klucza za pomocą PyMongo?

Musisz użyć insert_many metody i ustaw zamówioną opcję na False .

db_stock.insert_many(<list of documents>)

Jak wspomniano w zamówieniu dokumentacja opcji:

zamówione (opcjonalnie):Jeśli True (domyślnie) dokumenty będą umieszczane na serwerze szeregowo, w podanej kolejności. Jeśli wystąpi błąd, wszystkie pozostałe wkładki zostaną przerwane. Jeśli False, dokumenty zostaną wstawione na serwer w dowolnej kolejności, prawdopodobnie równolegle, a wszystkie dokumenty zostaną wstawione.

Co oznacza, że ​​wstawianie będzie kontynuowane, nawet jeśli wystąpi błąd zduplikowanego klucza.

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 widać dokument z _id 4, 5 zostały dodane do kolekcji.

Warto zauważyć, że jest to również możliwe w powłoce za pomocą insertMany metoda. Wystarczy ustawić nieudokumentowaną opcję ordered na false .

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Konwertowanie zapisanej daty mongo z powrotem na milisekundy od epoki Uniksa po załadowaniu?

  2. Strumieniowanie danych w czasie rzeczywistym za pomocą strumieni zmian MongoDB

  3. Rusztowania Yeoman, Mongoose i MongoDB

  4. Wypełnij zagnieżdżoną tablicę w manguście

  5. Pociągnij i dodaj jednocześnie z mongo