couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Mee <and...@hydratech.com.au>
Subject Unexpected results using start/end keys on a reduced view.
Date Sun, 23 Aug 2009 23:27:05 GMT
Hello everybody,
     I have just signed up on this list so please forgive me if this 
topic has been covered.

I am currently using the latest trunk version of CouchDB to experiment 
with it's features and I was experimenting with doing reports and using 
some views to run some data.
My map and reduce functions are:
Map:
function(doc) {
  if(doc.pc && doc.cc){
     emit([doc.cc,doc.pc,doc.task,doc.timestamp],doc.duration);
  }
}

Reduce:
function(keys, values) {
  return sum(values)
}

This produces a result like:

{"rows":[
{"key":["ACT","TXP","",1250825678],"value":5},
{"key":["ACT","TXP","",1250825960],"value":5},
{"key":["ACT","TXP","",1250827265],"value":5},
{"key":["HYD","SPR","blah",1250825378],"value":5},
{"key":["HYD","SPR","blah",1250825660],"value":5},
{"key":["HYD","SPR","blah",1250826965],"value":5},
{"key":["HYD","SPR","Phone",1250791287],"value":1},
{"key":["HYD","SPR","Phone",1250791355],"value":3}
]}

This is to be expected However I get some strange things happening if I 
filter this:
/taskreport?startkey=["HYD","","",1250825660]&endkey=["HYD","\u9999","\u9999",1250826965]&group=true
{"rows":[
{"key":["HYD","SPR","blah",1250825378],"value":5},
{"key":["HYD","SPR","blah",1250825660],"value":5},
{"key":["HYD","SPR","blah",1250826965],"value":5},
{"key":["HYD","SPR","Phone",1250791287],"value":1},
{"key":["HYD","SPR","Phone",1250791355],"value":3}
]}

I would have thought that since my startkey value is greater than the 
first row this should only return the last 4 rows
and in fact if I send specific data for the 2nd and 3rd keys this works:
/taskreport?startkey=["HYD","SPR","blah",1250825660]&endkey=["HYD","SPR","blah",1250826965]&group=true
{"rows":[
{"key":["HYD","SPR","blah",1250825660],"value":5},
{"key":["HYD","SPR","blah",1250826965],"value":5}
]}

I then try and group limit this result so I can group by 
["HYD","SPR","blah"], hence the reason for putting the timestamp field 
at the end of the keys.
/taskreport?startkey=["HYD","SPR","blah",1250825660]&endkey=["HYD","SPR","blah",1250826965]&group=true&group_level=3
{"rows":[
{"key":["HYD","SPR","blah"],"value":10}
]}
Which also works as expected.

So my question is with using start/end keys should it filter on each 
individual part of the key? Should not
startkey=["HYD","","",1250825660]&endkey=["HYD","\u9999","\u9999",1250826965]&group=true

return
{"rows":[
{"key":["HYD","SPR","blah",1250825660],"value":5},
{"key":["HYD","SPR","blah",1250826965],"value":5}
]}
as well? How could I get this working? BTW If I try a group_level on this
/taskreport?startkey=["HYD",null,null,1250825660]&endkey=["HYD",{},{},1250826965]&group=true&group_level=3
I get :
{"rows":[
{"key":["HYD","SPR","blah"],"value":15},
{"key":["HYD","SPR","Phone"],"value":4}
]}


Thanks, in advance, for any help :)

Regards
Andrew Mee











Mime
View raw message