I'm trying to implement a basic way of displaying comments in the way that Hacker News provides, using CouchDB. Not only ordered hierarchically, but also, each level of the tree should be ordered by a "points" variable.
The idea is that I want a view to return it in the order I except, and not make many Ajax calls for example, to retrieve them and make them look like they're ordered correctly.
This is what I got so far:
- Each document is a "comment".
- Each comment has a property
path
which is an ordered list containing all its parents.
So for example, imagine I have 4 comments (with _id 1
, 2
, 3
and 4
). Comment 2
is children of 1
, comment 3
is children of 2
, and comment 4
is also children of 1
. This is what the data would look like:
{ _id: 1, path: ["1"] },
{ _id: 2, path: ["1", "2"] },
{ _id: 3, path: ["1", "2", "3"] }
{ _id: 4, path: ["1", "4"] }
This works quite well for the hierarchy. A simple view
will already return things ordered the way I want it.
The issue comes when I want to order each "level" of the tree independently. So for example documents 2
and 4
belong to the same branch, but are ordered, on that level, by their ID. Instead I want them ordered based on a "points" variable that I want to add to the path - but can't seem to understand where I could be adding this variable for it to work the way I want it.
Is there a way to do this? Consider that the "points" variable will change in time.