在CouchDB-Python中映射和减少函数

时间:2014-10-19 06:23:03

标签: python python-2.7 mapreduce couchdb couchdb-python

如何在CouchDB-Python中使用map和reduce函数,因为下面的代码没有返回任何内容?

如果不需要还可以禁用reduce功能吗?

import couchdb

# $ sudo systemctl start couchdb
# http://localhost:5984/_utils/


def fill_data(users_no):
    for i in range(users_no):
        doc = {
            '_id': str(i),
            'uname': "name_" + str(i),
        }
        db.save(doc)


if __name__ == "__main__":
    server = couchdb.Server()
    db = server.create("test-pagination")
    fill_data(300)



    map_fun = """
                function(doc) {
                    emit(doc.uname, 1);
                }
              """
    reduce_fun ="_count"


    design = { 'views': {
              'get_unames': {
                  'map': map_fun,
                  'reduce': reduce_fun
                }
            } }
    db["_design/users"] = design

    uname_list = db.view('users/get_unames')

    print uname_list
    for r in uname_list :
        print r.key

2 个答案:

答案 0 :(得分:1)

您很少提供有关您想要获得的内容的详细信息。但我从代码中推断出你想要唯一名称。如果是这样,你肯定需要减少数据。

您的问题是您分组数据太多了。您应该使用group_level=exact(或group=true作为同义词)来调用视图。

答案 1 :(得分:0)

是的,可以禁用reduce,这正是您所需要的:

db.view('users/get_unames', reduce=False)

在reduce处于活动状态时,您只返回一行,只有一个值(300,行数)和空键。