I wrote a bloglet to illustrate this a while back, it's incomplete (I'd like to inline some code examples and use a lucene search to get a 2d query) but might help illustrate how view slicing works: http://drsm79.cloudant.com/view-slicing/_design/view-slicing/index.html
On 1 Mar 2012, at 00:25, Jim Klo <[email protected]> wrote: > actually, it's responding exactly as expected. > > you can't think of complex keys as a boolean "AND", but as a single value. > > so... > >> ["2012-01-01T02:07:50.387+0000","97ee813bfe4dbbf80a48b018b20a08bb"] > > is actually less than ALL your values because of CouchDB's collation rules. > > To explain this to others, I use the idea of turning the key into a > sentence.... typically i think of it as you have the last element grouped by > the the other elements from left to right. > > So you have "restaurantids grouped by timestamp" as your key, which means for > any given timestamp as a startkey/endkey, the last item in the key will be a > restuarantid... if you try rounding your timestamp to the nearest hour in > your example you'll see what I mean using your data... > > if you want to look up by restaurantid, order your keys from left to right... > [restaurantid, timestamp]... which will then order your view first by > restaurantid, then by timestamp... which gives you "timestamps grouped by > restaurantid" > > you'd then use > >> restaurant_orders_after_date?startkey=["97ee813bfe4dbbf80a48b018b20a08bb","2012-01-01T02:07:50.387+0000"]&endkey=["97ee813bfe4dbbf80a48b018b20a08bb",{}] > > > - Jim > > Jim Klo > Senior Software Engineer > Center for Software Engineering > SRI International > > On Feb 29, 2012, at 3:45 PM, Mathieu Castonguay wrote: > >> Here is the view: >> >> "restaurant_orders_after_date": { >> "map": "function(doc) { if(doc.restaurantId && >> doc.timeOfLatestStatusChange && doc.status && (doc.status == 'ACCEPTED' || >> doc.status == 'REJECTED')) { >> emit([doc.timeOfLatestStatusChange,doc.restaurantId], doc._id)}}" >> >> Execution of the view: >> >> restaurant_orders_after_date?startkey=["2012-01-01T02:07:50.387+0000","97ee813bfe4dbbf80a48b018b20a08bb"]&endkey=[{},"97ee813bfe4dbbf80a48b018b20a08bb"] >> >> {"id":"6bb4423653c6d9138524c110cf0047fb","key":["2012-01-03T14:00:52.542+0000","f98ba9a518650a6c15c566fc6f03dc8d"],"value":"6bb4423653c6d9138524c110cf0047fb"}, >> {"id":"6bb4423653c6d9138524c110cf007276","key":["2012-01-03T17:34:49.565+0000","97ee813bfe4dbbf80a48b018b20a08bb"],"value":"6bb4423653c6d9138524c110cf007276"}, >> {"id":"6bb4423653c6d9138524c110cf006d26","key":["2012-01-03T17:36:31.222+0000","97ee813bfe4dbbf80a48b018b20a08bb"],"value":"6bb4423653c6d9138524c110cf006d26"}, >> {"id":"6bb4423653c6d9138524c110cf007c76","key":["2012-01-03T17:38:45.485+0000","97ee813bfe4dbbf80a48b018b20a08bb"],"value":"6bb4423653c6d9138524c110cf007c76"}, >> {"id":"6bb4423653c6d9138524c110cf006119","key":["2012-01-03T17:47:51.637+0000","29b384e85adcdf5b2085dadba5018d03"],"value":"6bb4423653c6d9138524c110cf006119"}, >> {"id":"6bb4423653c6d9138524c110cf005e51","key":["2012-01-03T18:00:35.185+0000","29b384e85adcdf5b2085dadba5018d03"],"value":"6bb4423653c6d9138524c110cf005e51"} >> >> It seems to completly ignore the second value which is the id of the >> restaurant. I want all orders who's timeOfLatestStatusChange is greater >> than the current time (in this case "2012-01-01T02:07:50.387+0000") and >> who's restaurant id is a certain value(in this case >> "97ee813bfe4dbbf80a48b018b20a08bb"). >> >> Can anyone explain to me why the second parameter seems ignored, I can mean >> I can put "donkey" and it still does the same thing. >> >> Thank you, >> >> Matt >
