【发布时间】:2013-07-05 22:30:09
【问题描述】:
尝试向 empty mongodb 集合进行批量插入时出现以下错误。
pymongo.errors.DuplicateKeyError: E11000 重复键错误索引: cmdDistros.locDistro.$id 复制键:{: ObjectId('51dac9d0c74cd81acd85c0fd') }
我在创建任何文档时都没有指定 _id,所以 mongodb 应该正确创建唯一索引吗?这是我使用的代码:
#Populate database with uniform distribution
entries = []
for coor in freeIndices:
for theta in range(360):
entry = {"x" : coor[0], "y" : coor[1], "heading" : theta}
for i in range(numData):
entry["data" + str(i)] = 1./numData
entries.append(entry)
print "Entries created, loading into database..."
locDistro.insert(entries)
从 mongoDB 手中夺走命运,我尝试使用以下方法创建自己的索引:
#Populate database with uniform distribution
entries = []
idNum = 0
for coor in freeIndices:
for theta in range(360):
print idNum
entry = {"_id" : idNum, "x" : coor[0], "y" : coor[1], "heading" : theta}
idNum += 1
for i in range(numData):
entry["data" + str(i)] = 1./numData
entries.append(entry)
print "Entries created, loading into database..."
locDistro.insert(entries, manipulate = False)
打印语句显示文档创建时的每个 idnum,它们都是唯一的,并且按预期递增。但是在插入时,我收到了错误:
pymongo.errors.DuplicateKeyError: E11000 重复键错误索引: cmdDistros.locDistro.$id 复制密钥:{ : 0 }
只有一个文档被插入到我的数据库中。
我完全被难住了,有人知道为什么会发生这种情况吗?
【问题讨论】:
-
我不知道发生了什么,但是问题已经设法自行解决了...我只是一遍又一遍地运行代码,它就可以正常工作....奇怪..如果有人有一个解释我仍然想知道以防它再次发生......顺便说一下,entry.append 行是一个错字,实际位置与它上面的 for 对齐。
-
集合中是否定义了其他索引?
-
无。只是_id。我想使用 ensure_index 在 x y 和标题上创建索引,但它们不是唯一的,所以我不确定这是否可行。无论如何,此时只有 _id 被索引。
-
这两个选项现在有效吗? _id是驱动创建的,_id是自己创建的。
-
驱动创建的_id现在可以工作了,我自己的_id没有尝试过创建,经验让我在知道可以工作后不敢再碰代码。
标签: python mongodb pymongo database