假设我们有一个假设论坛的以下数据模型:
// 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。到目前为止,一切都很好。
但,
- 鉴于流理论上是无界的,我无法在应用程序或 CouchDB 的列表/过滤器函数中对其进行排序或过滤,因为它们适用于返回的(并且已经被截断的)数据集;
- 更改键或组级别会破坏我想要的分组,帖子 ID 必须是组键。
问题:如何找到 N 个最近没有回复的线程,如何按帖子的时间戳对缩减视图进行排序?
更简单的问题:如果有没有回复的线程(布尔解决方案),我该如何找到?这意味着过滤缩减的视图,以便只留下零值行。