加入/总结CouchDB
发布时间:2020-12-13 13:28:40 所属栏目:百科 来源:网络整理
导读:使用 CouchDB,我目前有一个代表一个想法的文档,你可以评价这个想法.每个想法都是一个文档,每个评级都是一个不同的文档.我这样做是为了避免在人们评价想法时出现并发访问问题. 我的文档看起来像那样(我简化了它们): 一个主意: { "_id": "idea1","title": "A
使用
CouchDB,我目前有一个代表一个想法的文档,你可以评价这个想法.每个想法都是一个文档,每个评级都是一个不同的文档.我这样做是为了避免在人们评价想法时出现并发访问问题.
我的文档看起来像那样(我简化了它们): 一个主意: { "_id": "idea1","title": "A great idea" } 评分: { "_id": "rating1","rating": 1,"author": "author1" } { "_id": "rating2","author": "author2" } 我目前使用reduce函数来返回我的想法ID和他/她的评级(一个简单的评级总和): 地图: function(doc) { if (doc.type == "rating") emit(doc.idea_id,doc.rating); } 降低: function(keys,values,rereduce) { return sum(values); } 我的问题是:我如何“加入”“想法”文档,其中减少的结果代表了该想法的评级? 解决方法
地图:
function(doc) { switch (doc.type) { case "idea": emit(doc._id,["idea",doc]); break; case "rating": emit(doc.idea_id,["rating",doc.rating]); break; } } 降低: function(keys,rereduce) { var i,l,ret = {idea:null,rating:0}; for (i = 0,l = values.length; i < l; ++i) { switch (values[i][0]) { case "idea": ret.idea = values[i][1]; break; case "rating": ret.rating += values[i][1]; break; } } return ret; } 另一个选择是use view collation来做这个伎俩. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |