CouchDB中的一个视图,用于查找最近没有回复的论坛线程
假设我们有一个假设论坛的以下数据模型:CouchDB中的一个视图,用于查找最近没有回复的论坛线程,couchdb,Couchdb,假设我们有一个假设论坛的以下数据模型: // Post { "_id": 1, "type": "post", "text": "", "timestamp": 1, } // Reply { "_id": 2, "post_id": 1, "type": "reply", "text": "", "timestamp": 2, } 所有回复都是平淡的(没有回复回复,所有回复都是对一篇帖子的回复) 过去的帖子和回复源源不
// Post
{
"_id": 1,
"type": "post",
"text": "",
"timestamp": 1,
}
// Reply
{
"_id": 2,
"post_id": 1,
"type": "reply",
"text": "",
"timestamp": 2,
}
到目前为止,我有以下映射/减少功能:
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个最近没有回复的线程,如何根据帖子的时间戳对缩减视图进行排序
更简单的问题:如果存在没有回复的线程(布尔解决方案),我该如何查找?这意味着过滤简化视图,以便只剩下零值行。我认为更容易的实现是添加额外的字段
回复计数
默认为零,
回复时,
答复(u计数+=1)
来搜索没有回复的帖子,
映射功能可以简单到:
function (doc) {
if (doc.type == "post")
{
emit([doc.reply_count, doc.timestamp], null);
}
}
查询:
descending=true
startkey=[0,9999999999]
endkey=[0,0]
include_docs=true
考虑到您提供的当前数据模型,这听起来像是应用程序逻辑的问题。@OctavianDamiean,正如我所说的,我无法将其推送到应用程序中,因为数据集是无限的。@MattJoiner因为您可以有任意数量的过去的帖子/回复,所以未指定最早的事件是什么。