couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Klo <>
Subject Re: Question about multiple keys with ranges
Date Sat, 11 Feb 2012 23:37:00 GMT
Reverse the key. [userid, time]

CouchDB is all about understanding collation. Basically views are sorted/grouped from left
to right alphanumeric. See for the finer details
as there are more rules than the basics I mention. 

so the reversal sorts the view by userid first, then date as string. Instead of sorting by
dates then userids. 

You do it this way because you know the exact userid, but not the exact date. If you knew
the exact date, but not the userid, what you have currently would be better. 

- Jim

Sent from my iPad

On Feb 11, 2012, at 1:54 PM, "Mathieu Castonguay" <> wrote:

> I have a simple document named Order structure with the fields id, name,
> userId and timeScheduled.
> What I would like to do is create a view where I can find the
> document.idfor those who's userId is some value and timeScheduledis
> after a given date.
> My view:
> "by_users_after_time": {
>       "map": "function(doc) { if (doc.userId && doc.timeScheduled) {
> emit([doc.timeScheduled, doc.userId], doc._id); }}"
>   }
> If I do
> localhost:5984/orders/_design/Order/_view/by_users_after_time?startKey="[2012-01-01T11:40:52.280Z,f98ba9a518650a6c15c566fc6f00c157]"
> I get every result back. Is there a way to access key[1] to do an if
> doc.userId == key[1] or something along those lines and simply emit on the
> time?
> This would be the SQL equivalent of select id from Order where userId =
> "f98ba9a518650a6c15c566fc6f00c157" and timeScheduled >
> 2012-01-01T11:40:52.280Z;
> I did quite a few Google searches but I can't seem to find a good tutorial
> on working with multiple keys. It's also possible that my approach is
> entirely flawed so any guidance would be appreciated.
> Thank you,
> Matt

View raw message