【发布时间】:2012-05-14 07:36:05
【问题描述】:
我正在尝试使用 CouchDB 以 Hacker News 提供的方式实现显示 cmets 的基本方式。不仅按层次排序,而且树的每一层都应该按“点”变量排序。
我的想法是,我希望一个视图按照除此之外的顺序返回它,而不是进行很多 Ajax 调用,例如,检索它们并使它们看起来像是正确排序的。
这是我目前得到的:
- 每个文档都是一个“评论”。
- 每条评论都有一个属性
path,这是一个包含其所有父级的有序列表。
例如,假设我有 4 个 cmets(带有 _id 1、2、3 和 4)。评论2 是1 的孩子,评论3 是2 的孩子,评论4 也是1 的孩子。这就是数据的样子:
{ _id: 1, path: ["1"] },
{ _id: 2, path: ["1", "2"] },
{ _id: 3, path: ["1", "2", "3"] }
{ _id: 4, path: ["1", "4"] }
这对于层次结构非常有效。一个简单的view 已经可以按照我想要的方式返回。
当我想独立地对树的每个“级别”进行排序时,问题就出现了。因此,例如文档 2 和 4 属于同一个分支,但在该级别上按其 ID 排序。相反,我希望它们根据我想要添加到路径中的“点”变量进行排序 - 但似乎无法理解我可以在哪里添加这个变量以使其按照我想要的方式工作。
有没有办法做到这一点?考虑“点”变量会随时间变化。
【问题讨论】:
-
嗨,卢卡。你愿意大扫除更新 cmets 吗?例如,每小时增加他们的年龄?该问题的答案会影响问题的答案。谢谢!
-
嗨@JasonSmith。现在我们可以忘记日期问题。让我们假设每个“评论”都有一个
score属性,其中包含其分数的整数值。显示不仅需要显示如上所述的层次结构,还需要根据score属性对树的每个“级别”进行排序。这就是我遇到问题的地方。你可以在这里看到一个我想要实现的例子:hckr.iriscou.ch/news/_design/news/_view/items 第一个是根评论,其余的孩子,还有孩子的孩子。键包含路径以及作为最后一个元素的score值。 -
但是,正如您所见,这不起作用,因为键的倒数第二个元素是实际文档的 _id。这是必需的,以便我可以按顺序附加其子项(基于路径逻辑)。我希望这是有道理的。无论如何,将分数保持为最后一个值是行不通的:(
标签: algorithm data-structures tree couchdb