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
> 

Reply via email to