获得;“呃”&引用;E11000使用Java驱动程序插入mongo时出现重复密钥错误
线程“main”com.mongodb.MongoException$DuplicateKey中出现异常:{ “serverUsed”:“localhost/127.0.0.1:27017”,“err”:“E11000重复 键错误索引:twitterdb03.LevelAFollowers.$id dup键:{: ObjectId('52d5636de408652b4853a8fe'),“代码”:11000,“n”:0, “connectionId”:12,“ok”:1.0} 我正在使用Mongo2.11.1 java中的简单写操作从未出现过问题获得;“呃”&引用;E11000使用Java驱动程序插入mongo时出现重复密钥错误,java,mongodb,twitter4j,Java,Mongodb,Twitter4j,线程“main”com.mongodb.MongoException$DuplicateKey中出现异常:{ “serverUsed”:“localhost/127.0.0.1:27017”,“err”:“E11000重复 键错误索引:twitterdb03.LevelAFollowers.$id dup键:{: ObjectId('52d5636de408652b4853a8fe'),“代码”:11000,“n”:0, “connectionId”:12,“ok”:1.0} 我正在使用Mong
myMap.put(inid, followersList);
myObj.putAll(myMap);
myIdMapCollection.insert(myObj);
尝试调用
myIdMapCollection.save(myObj)代码>而不是myIdMapCollection.insert(myObj)代码>
save
方法不同于insert
方法,它会向上插入,这意味着如果文档包含\u id
,它会替换该文档
我的猜测是,您使用游标查询获取了DBObject
,并对其进行了操作,您希望保留更改。在这种情况下,save
是正确的方法
因此,当调用insert
时,DBObject
已经与\u id
关联,调用insert
因此失败,因为集合中已经有一个具有该\u id
的文档,该文档应该是唯一的(重复索引错误) 我找到了答案。我猜您的代码看起来像这样(大大简化了)?:
问题是,如果\u id
字段不存在,PyMongo在插入它之前会将一个_id字段注入文档中(\u id
总是在客户端使用10gen驱动程序生成)。这意味着第一次通过循环\u id
是通过insert方法添加的。由于doc
是在循环外部定义的,因此每个后续通过循环的过程对\u id
使用相同的值
解决方案:
删除密钥id
或手动创建一个新的:
终于成功了,谢谢你在这里耽搁了2天。我也有同样的问题!但是用,保存不好!!但我的重复键在我手动创建的索引中,而不是在_id上。是这样还是这样?如果是,我如何处理这个问题?谢谢,最后是一个有用且简单的解决方案。
doc = {}
for i in xrange(2):
doc['i'] = i
collection.insert(doc)
for i in xrange(2):
doc['i'] = i
if '_id' in doc:
del doc['_id']
collection.insert(doc)
from bson.objectid import ObjectId
for i in xrange(2):
doc['i'] = i
doc['_id'] = ObjectId()
collection.insert(doc)