3
比方說,我們有一個假設的論壇下面的數據模型:CouchDB中的視圖找到最近的論壇主題零回覆
// 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);
}
如果我跑這和GROUP BY鍵,它給我的所有線程的列表,其中值沒有回覆的人是0 。到現在爲止還挺好。
但是,
- 鑑於流在理論上是無限的,我不能排序或在應用程序或CouchDB的列表/過濾功能過濾它,因爲它們適用於返回(並已截斷)數據集;
- 更改密鑰或組級別會破壞我想要的分組,帖子ID必須是組密鑰。
問題:我如何找到任何回覆N個最近的線程,我怎麼排序後的時間戳的縮小圖?
更容易的問題:如果有線程沒有回覆(布爾解決方案),我該如何找到?這意味着篩選縮小的視圖,以便只剩下零值的行。
這聽起來像是給出了當前數據模型的應用程序邏輯。 – 2012-07-24 15:18:34
@OctavianDamiean,正如我所說的,我無法將它推到應用程序中,因爲數據集是無界的。 – 2012-07-24 23:05:45
爲什麼這個流是無界的? – 2012-07-25 01:51:31