e-J*_*Jah 4 couchdb document-oriented-db nosql
使用CouchDB,我目前有一个代表一个想法的文档,你可以评价这个想法.每个想法都是一个文档,每个评级都是一个不同的文档.我这样做是为了避免在人们评价想法时出现并发访问问题.
我的文档看起来像那样(我简化了它们):
一个主意:
{
"_id": "idea1",
"title": "A great idea"
}
Run Code Online (Sandbox Code Playgroud)
评分:
{
"_id": "rating1",
"rating": 1,
"author": "author1"
}
{
"_id": "rating2",
"rating": 1,
"author": "author2"
}
Run Code Online (Sandbox Code Playgroud)
我目前使用reduce函数来返回我的想法ID和他/她的评级(一个简单的评级总和):
地图:
function(doc) {
if (doc.type == "rating")
emit(doc.idea_id, doc.rating);
}
Run Code Online (Sandbox Code Playgroud)
降低:
function(keys, values, rereduce) {
return sum(values);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何"加入""想法"文档,其中减少的结果代表了该想法的评级?
地图:
function(doc) {
switch (doc.type) {
case "idea": emit(doc._id, ["idea", doc]); break;
case "rating": emit(doc.idea_id, ["rating", doc.rating]); break;
}
}
Run Code Online (Sandbox Code Playgroud)
降低:
function(keys, values, 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;
}
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用视图整理来完成这个技巧.
| 归档时间: |
|
| 查看次数: |
1793 次 |
| 最近记录: |