CouchDB-Python中的Map和reduce函数
由于下面的代码不返回任何内容,如何在CouchDB Python中使用map和reduce函数 如果不需要,是否也可以禁用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),
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算法)。