我有一个关于pymongo插入循环内部的棘手问题,为什么结果只是第一条记录,如果我使用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()
Run Code Online (Sandbox Code Playgroud)
我只是在Mongo中插入了10000个条目,但我只能找到一个条目.为什么?
如果传递给的文档collection.insert()不包含_id,则会在保存时添加(参见pymongo api).这意味着在第一次调用之后,文档确实有一个_id,因此不会再次插入.
如果您调用collection.save()存储的文档已更新,您将最终得到一个文档,其最后一个值作为corp_id传递.
一个简单的"修复"是_id在调用.insert()之前在每次迭代中从dict中删除键:
for i in xrange(10000):
cond.update({'corp_id':i})
cond.pop('_id', None)
coll.insert(cond)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2120 次 |
| 最近记录: |