在CouchDB-Python中映射和减少函数
问题描述:
在CouchDB-Python中如何使用map和reduce函数是可能的,因为下面的代码不会返回任何东西?在CouchDB-Python中映射和减少函数
如果不需要,还可以禁用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
答
是的,它可以禁用减少,而这正是你所需要的:
db.view('users/get_unames', reduce=False)
随着降低主动,你只有一行回来了,只是一个值(300,你的行数)和空键。
答
对于你想得到的东西,你只提供很少的细节。但我从代码推断,你想要独特的名字。如果是这样,你肯定需要减少数据。
你的问题是你的群数据太多。您应该使用group_level=exact
(或group=true
这是一个同义词)来调用视图。
这只是一个测试,对吧?你知道你不应该在每次查询时创建视图,是不是?否则你将失去Map/Reduce的效率优势。 – 2014-10-20 05:35:31
你的例子很奇怪......如果你真的想*所有的数据*,没有*自定义排序*,也没有*分组*。您应该使用查询'_all_docs'而不是您的自定义视图。您甚至可以查询'_all_docs?include_docs = true'来获取文档详细信息。如果我可能给你一个建议:你应该在学习CouchDB-Python之前探索HTTP API(以及普通的Map/Reduce算法)*。 – 2014-10-20 06:17:50