假设我们有一个假设论坛的以下数据模型:
// Post
{
"_id": 1,
"type": "post",
"text": "",
"timestamp": 1,
}
// Reply
{
"_id": 2,
"post_id": 1,
"type": "reply",
"text": "",
"timestamp": 2,
}
理想情况下,我想在没有任何回复的情况下找到最新的主题。
到目前为止,我有这些map / reduce函数:
map: function(doc) {
if (doc.type == "post") {
emit(doc._id, 0);
}
if (doc.type == "reply") {
emit(doc.post_id, 1);
}
},
reduce: function(keys, vals, rereduce) {
return sum(vals);
}
如果我按键运行它并按组分组,它会给我一个所有线程的列表,其中对于未复制的线程,值为0。到目前为止,非常好。
但是,
问题:如何找到没有回复的N个最新主题,如何按帖子的时间戳排序缩小的视图?
更简单的问题:如果有没有回复的线程(布尔解决方案),我怎么找到?这意味着过滤缩小视图,因此只剩下零值行。
答案 0 :(得分:1)
我认为更容易实现的是添加其他字段reply_count
,
默认为零,
当答复回复时,
REPLY_COUNT + = 1
来搜索零回复的帖子,
map函数可以简单如下:
function (doc) {
if (doc.type == "post")
{
emit([doc.reply_count, doc.timestamp], null);
}
}
查询:
descending=true
startkey=[0,9999999999]
endkey=[0,0]
include_docs=true