CouchDB-Python中的Map和reduce函数

CouchDB-Python中的Map和reduce函数,python,python-2.7,mapreduce,couchdb,couchdb-python,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),

由于下面的代码不返回任何内容,如何在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

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

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

当reduce处于活动状态时,只需一个值(300,行数)和一个空键,就可以返回一行。

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


您的问题是您分组的数据太多。您应该使用
group\u level=exact
(或者
group=true
这是同义词)调用视图。

这只是一个测试,对吗?您知道不应该每次查询视图时都创建它,不是吗?否则您将失去Map/Reduce的效率优势。您的示例很奇怪。。。如果您确实需要所有数据,无需自定义排序或分组。您应该使用query
\u all\u docs
而不是自定义视图。您甚至可以查询
\u all\u docs?include\u docs=true
以获取文档详细信息。如果我可以给你一个建议的话:在学习CouchDB-Python之前,你应该先研究一下httpapi(以及常见的Map/Reduce算法)。