【发布时间】:2014-10-19 06:23:03
【问题描述】:
如何在 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
【问题讨论】:
-
这只是一个测试,对吧?您知道您不应该在每次查询时都创建视图,不是吗?否则您将失去 Map/Reduce 的效率优势。
-
你的例子很奇怪......如果你真的想要所有数据,没有自定义排序,也没有分组 .您应该使用查询
_all_docs而不是您的自定义视图。您甚至可以查询_all_docs?include_docs=true以获取文档详细信息。如果我可以给你一个建议:你应该在学习 CouchDB-Python 之前探索 HTTP API(和常见的 Map/Reduce 算法)。
标签: python python-2.7 mapreduce couchdb couchdb-python