incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Luca Matteis <lmatt...@gmail.com>
Subject Hierarchical comments Hacker News style
Date Wed, 16 May 2012 10:11:17 GMT
Sorry for the repost. I was told user@ is more appropriate for this
kind of question:

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. If you're familiar with sites such as Hacker News
or Reddit you know that each level of the comment tree is ordered by
the amount of points and also the date they were posted - however, for
sake of simplicity I'll just talk about 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 with each comment underneath the correct one.

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.

Thank you,
Luca

Mime
View raw message