Re: avoid exception in bulk insert with duplicate docs

From: Bernie Hackett <bernie@xxxxxxxxx>
To: mongodb-user <mongodb-user@xxxxxxxxxxxxxxxx>
Date: Thu, 5 May 2016 16:45:24 -0700 (PDT)
Why ads?
The insert_many method has an "ordered" option (so does bulk_write). Pass 
False for that option and all inserts will be attempted, with any errors 
reported at the end.

http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.insert_many

On Thursday, May 5, 2016 at 4:29:11 PM UTC-7, Valentin Kuznetsov wrote:

Hi,
I'm trying to find out a way how I can insert bunch of docs via bulk 
python API, e.g. insert_many, where I may have a duplicate in my docs.
Current behavior stop when it encounters a duplicate error and it does not 
proceed afterwards because of thrown exception. I'd like to avoid that 
behavior and I want to bulk succeed and just skip duplicates. Here is a 
simple example:

from pymongo import MongoClient, DESCENDING
from pymongo.errors import BulkWriteError

uri = 'mongodb://localhost:8230'
client = MongoClient(uri)
coll = client['test']['db']
coll.create_index([('test',DESCENDING)], unique=True)

docs = [{'test':1} for _ in range(10)] + [{'foo':1 for _ in range(5)}]
try:
    coll.insert_many(docs)
except BulkWriteError:
    pass
docs = [{'bla':1} for _ in range(10)]
coll.insert_many(docs)

Doing so, I only see two docs in my test.db

{"test": 1, "_id": "572bd5392f74d466951ebb4a"}
{"_id": "572bd5392f74d466951ebb55", "bla": 1}

while I want to see 3 docs one with test, one with foo and one with bla 
keys.

We have an application which needs to write millions docs and I thought we 
can avoid a full scan to remove duplicates. Of course I can use plain 
insert, but it will be much slower operation.

Thanks,
Valentin.


-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: https://docs.mongodb.org/manual/support/
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/6c7b0192-7640-4da2-98a0-644f46001e12%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Why ads?