我在这个页面上找到了答案.我猜你的代码看起来像这样(大大简化)?:
doc = {} for i in xrange(2): doc['i'] = i collection.insert(doc)
问题是PyMongo 在插入文件之前(如果该_id
字段不存在)将_id字段注入文档(_id
始终使用10gen驱动程序生成客户端).这意味着第一次通过循环_id
由insert方法添加.由于doc
在循环外定义,因此每个后续循环都使用相同的值_id
.
解:
删除键_id
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)
Ori Dar.. 7
试着打电话myIdMapCollection.save(myObj);
而不是myIdMapCollection.insert(myObj);
该save
方法与insert
upsert 不同,意味着如果文档包含_id
,则替换该文档.
我的猜测是你已经DBObject
使用了游标| 查询,操纵它,并且您想要保留更改.在这种情况下,save
是正确的方法.
所以,当调用insert
了DBObject
已经与相关的_id
,称insert
这样失败了,因为你已经有一个文档_id
的集合,它应该是唯一的(重复的索引错误).
试着打电话myIdMapCollection.save(myObj);
而不是myIdMapCollection.insert(myObj);
该save
方法与insert
upsert 不同,意味着如果文档包含_id
,则替换该文档.
我的猜测是你已经DBObject
使用了游标| 查询,操纵它,并且您想要保留更改.在这种情况下,save
是正确的方法.
所以,当调用insert
了DBObject
已经与相关的_id
,称insert
这样失败了,因为你已经有一个文档_id
的集合,它应该是唯一的(重复的索引错误).
我在这个页面上找到了答案.我猜你的代码看起来像这样(大大简化)?:
doc = {} for i in xrange(2): doc['i'] = i collection.insert(doc)
问题是PyMongo 在插入文件之前(如果该_id
字段不存在)将_id字段注入文档(_id
始终使用10gen驱动程序生成客户端).这意味着第一次通过循环_id
由insert方法添加.由于doc
在循环外定义,因此每个后续循环都使用相同的值_id
.
解:
删除键_id
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)