CouchDB-Python中的Map和Reduce函数
在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
,这两个是同义词)。