pymongo插入循环内

时间:2011-05-06 03:33:48

标签: insert pymongo

我对循环中的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()

我只是在Mongo中插入了10000个条目,但我只能找到一个条目。为什么呢?

1 个答案:

答案 0 :(得分:5)

如果传递给collection.insert()的文档不包含_id,则会在保存时添加(请参阅pymongo api)。这意味着在第一次通话后,文档 会有_id,因此不会再次插入。

如果您致电collection.save(),则会更新存储的文档,您最终将获得一个文档,其中最后一个值作为corp_id传递。

一个简单的'修复'是在调用.insert()之前在每次迭代中从dict中删除_id键:

for i in xrange(10000):
    cond.update({'corp_id':i})
    cond.pop('_id', None)
    coll.insert(cond)