2011-05-06 130 views
4

所有我有一个关于pymongo插入循环内部的棘手问题,为什么结果只有第一条记录,如果我使用insert()或者是最后一条记录,如果我使用save()。pymongo插入循环

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'[email protected]', 
    '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个条目,但是我只能找到一个条目。为什么?

回答

5

如果传递给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) 
+0

cond.pop( '_ ID',无)工作完美,非常感谢! – Suman 2012-05-21 21:10:20