假设我在CouchDB数据库中有这样的博客条目:
{"name":"Mary", "postdate":"20110412", "subject":"this", "message":"blah"} {"name":"Joe", "postdate":"20110411", "subject":"that", "message":"yadda"} {"name":"Mary", "postdate":"20110411", "subject":"and this", "message":"blah-blah"} {"name":"Joe", "postdate":"20110410", "subject":"And other thing", "message":"yada-yada"} {"name":"Jane", "postdate":"20110409", "subject":"Serious stuff", "message":"Not really"}
很容易获得所有帖子的列表。但是如何获得所有用户的最新帖子列表?
就像那样:
{"name":"Mary", "postdate":"20110412", "subject":"this", "message":"blah"} {"name":"Joe", "postdate":"20110411", "subject":"that", "message":"yadda"} {"name":"Jane", "postdate":"20110409", "subject":"Serious stuff", "message":"Not really"}
答案 0 :(得分:4)
尝试使用此地图功能:
function(doc) {
if (doc.postdate && doc.name) {
emit([doc.name, doc.postdate], 1);
}
}
以及以下减少功能:
function(keys, values, rereduce) {
var max = 0,
ks = rereduce ? values : keys;
for (var i = 1, l = ks.length; i < l; ++i) {
if (ks[max][0][1] < ks[i][0][1]) max = i;
}
return ks[max];
}
并使用group_level=1
进行查询。它会为您提供_id
个帖子,然后您可以使用the keys
parameter or using a POST的单个查询检索所有帖子。
我不确定这是否是最佳方法,但似乎有效。
UPDATE:修复了正确处理rereduce的地图。
答案 1 :(得分:2)
您将发布postdate作为密钥,因为密钥已排序。例如,这就是你的地图功能的样子......
function(doc) {
if(doc.postdate) {
emit(doc.postdate, doc);
}
}
这将为您提供按日期升序排序的所有文档。如果您想降序,请使用?descending=true
干杯。