我对循环内的 pymongo insert 有一个棘手的问题,为什么如果我使用 insert() 结果只是第一条记录,或者如果我使用 save() 则结果是最后一条记录。
from pymongo import Connection
m = Connection(config.get('server'))
mdb = m[config.get('db_name')]
cond = {
'corp_fax_no' : u'5667767',
'corp_area_id' : 12L,
'corp_url' : u'http://www.example.com',
'corp_id' : 1L,
'corp_addr' : u'some thing',
'corp_post_no' : u'220940',
'corp_email' : u'123@123.com',
'corp_tel_no' : u'714-717-2265'
}
@tool.timeit
def test_insert_mongo():
cn = '{0}'.format(config.get("coll_timetest"))
coll = mdb[cn]
for i in xrange(10000):
print i
cond.update({'corp_id':i})
coll.insert(cond)
test_insert_mongo()
我只是在 Mongo 中插入了 10000 个条目,但我只能找到一个条目。为什么?
最佳答案
如果文件传递给 collection.insert()
不包含 _id
,它将在保存时添加(参见 pymongo api )。这意味着在第一次调用之后,文档 有一个_id
因此将不是 重新插入。
如果您调用collection.save()
存储的文档已更新,您最终将得到一个文档,其中最后一个值作为 corp_id 传递。
一个简单的“修复”是删除 _id
在调用 .insert() 之前,每次迭代时从字典中获取键:
for i in xrange(10000):
cond.update({'corp_id':i})
cond.pop('_id', None)
coll.insert(cond)
关于insert - pymongo 在循环内插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906493/