Getting “err” : "E11000 duplicate key error when inserting into mongo using the Java driver

前端 未结 2 1559
野性不改
野性不改 2020-12-17 18:57

Exception in thread \"main\" com.mongodb.MongoException$DuplicateKey: { \"serverUsed\" : \"localhost/127.0.0.1:27017\" , \"err\" : \"E11000 duplicate key

2条回答
  •  死守一世寂寞
    2020-12-17 19:53

    I found an answer on this page. I’m guessing your code looks something like this (greatly simplified)?:

    doc = {} 
    for i in xrange(2): 
        doc['i'] = i 
        collection.insert(doc) 
    

    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 with 10gen drivers). That means that the first time through the loop _id is added by the insert method. Since doc is defined outside the loop, each subsequent pass through the loop uses the same value for _id.

    Solution:

    1. Delete the key _id
    for i in xrange(2): 
        doc['i'] = i 
        if '_id' in doc: 
            del doc['_id'] 
        collection.insert(doc)
    
    1. Or create manually a new one:
    from bson.objectid import ObjectId 
    for i in xrange(2): 
        doc['i'] = i 
        doc['_id'] = ObjectId() 
        collection.insert(doc)
    

提交回复
热议问题