CouchDB-Python中的Map和Reduce函数

0 投票
2 回答
1956 浏览
提问于 2025-04-28 08:55

在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

是的,你可以关闭这个“reduce”功能,这正是你需要的:

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

当“reduce”功能开启时,你只会得到一行结果,这一行里只有一个值(300,也就是你行的数量),而且键是空的。

1

你提供的信息很少,所以我只能根据代码来推测你想要的结果。看起来你想要的是唯一的名字。如果是这样的话,你确实需要对数据进行一些处理。

你的问题在于你对数据的分组做得太多了。你应该用 group_level=exact 来调用视图(或者用 group=true,这两个是同义词)。

撰写回答