MongoDB insert raises duplicate key error
You need to understand that your entries list has a bunch of references to one entry dict. So when PyMongo sets entries[0]['_id'], all the other entries get the same _id. (In fact, PyMongo will iterate through the list setting each entry's _id, so all the entries will have the final _id at the end.) A quick fix would be:
entries.append(entry.copy())
This is merely a shallow copy, but in the code you shared I believe this is enough to fix your problem.
I had the same error using insert_one()
and also insert_many()
My solution is, to use update_one()
with upsert=True
doc = {a: 1, b:2, x:{xx:"hello",yy:"world"}}
db.collection.update_one(doc,{'$set':doc},upsert=True)
This works for me :-)
Make sure variable 'entries' is cleared after every insert.
The problem is that PyMongo injects an _id field into the document, if the _id field does not exist, before inserting it (_id is always generated client side). That means that the first time through the loop _id is added by the insert method. Since 'entries' is defined outside, each subsequent pass through the loop uses the same value for _id.
Clear the dict variable in top of the loop statements.
OR
Remove _id from the dict. Eg:
del my_dict['_id']
Delete the key "_id"
:
for i in xrange(2):
doc['i'] = i
if '_id' in doc:
del doc['_id']
collection.insert(doc)
Or manually create a new one:
from bson.objectid import ObjectId
for i in xrange(2):
doc['i'] = i
doc['_id'] = ObjectId()
collection.insert(doc)
Getting "err" : "E11000 duplicate key error when inserting into mongo using the Java driver