簡體   English   中英

CouchDB - 具有排名的分層評論。黑客新聞風格

[英]CouchDB - hierarchical comments with ranking. Hacker News style

我正在嘗試使用CouchDB以Hacker News提供的方式實現顯示評論的基本方式。 不僅按層次排序,而且樹的每個級別都應按“點”變量排序。

我的想法是,我想要一個視圖按照我的順序返回它,而不是例如進行許多Ajax調用,以檢索它們並使它們看起來像是正確排序的。

這是我到目前為止所得到的:

  • 每個文件都是“評論”。
  • 每個注釋都有一個屬性path ,它是一個包含其所有父項的有序列表。

因此,例如,想象我有4個注釋(以_id 1234 )。 評論21孩子,評論32孩子,評語4也是1孩子。 這就是數據的樣子:

{ _id: 1, path: ["1"] },
{ _id: 2, path: ["1", "2"] },
{ _id: 3, path: ["1", "2", "3"] }
{ _id: 4, path: ["1", "4"] }

這對於層次結構非常有效。 一個簡單的view已經按照我想要的方式返回訂單。

當我想獨立地命令樹的每個“級別”時,問題出現了。 因此,例如,文檔24屬於同一分支,但在該級別上按其ID排序。 相反,我希望它們基於我想要添加到路徑的“點”變量進行排序 - 但似乎無法理解我可以在哪里添加此變量以使其按照我想要的方式工作。

有沒有辦法做到這一點? 考慮“點”變量將隨時間變化。

因為每個級別需要按分數遞歸排序,所以Couch需要知道每個父級的分數,以使其按照您希望的方式工作。

以下面的分數為例(1:10,2:10,3:10,4: 20

在這種情況下,您希望訂購如下:

.1
.1.4
.1.2
.1.2.3

您的文檔需要像這樣的分數數組:

{ _id: 1, path: [1], scores: [10] },
{ _id: 2, path: [1, 2], scores: [10,10] },
{ _id: 3, path: [1, 2, 3], scores: [10,10,10] },
{ _id: 4, path: [1, 4], scores: [10,20] }

然后,您將在視圖中使用以下排序鍵。

emit([doc.scores, doc.path], doc)

路徑被用作決勝局,因為會出現兄弟評論具有完全相同分數的情況。 沒有決勝局,他們的后代可能會失去他們的分組(通過祖先鏈)。

注意:此方法將從低到高返回分數,而您可能需要分數(從高到低)和路徑/決勝局(從低到高)。 因此,解決方法是使用每個得分的倒數填充得分數組,如下所示:

{ _id: 1, path: [1], scores: [0.1] },
{ _id: 2, path: [1, 2], scores: [0.1,0.1] },
{ _id: 3, path: [1, 2, 3], scores: [0.1,0.1,0.1] },
{ _id: 4, path: [1, 4], scores: [0.1,0.2] }

然后在請求視圖時使用descending=true

也許有人有趣的是這個問題的線程與解決方案的變體:

http://mail-archives.apache.org/mod_mbox/couchdb-dev/201205.mbox/thread - >主題“分層評論黑客新聞風格”16/05/2012

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM