couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From J Chris Anderson <jch...@gmail.com>
Subject Re: Reduce function results
Date Fri, 21 May 2010 16:41:43 GMT
It's this line that looked odd to me:

>>>> var v = new Number(values[val][v_n]);
>> 



I don't usually see the new Number() construct. Why not just store as a JSON number and then
use values[val][v_n] directly?

Chris

On May 21, 2010, at 1:21 AM, Tom Sante wrote:

> Ok the log() helped to narrow things down:
> res[v_n]={'mi':v,'ma':v,'c':1,'t':v};
> in this context v isn't returned as a Number but as a {}
> In number context, like in a Math.min(v,othernumber); it works fine.
> Same thing happens with log:
> log(v) returns {}
> log(''+v) returns -0.453
> 
> Any reason why this would be the case since this is not the behaviour of a Number in
normal js (JavaScript-C 1.7.0 2007-10-03) ?
> 
> I worked around it by forcing v to become a string here
> res[v_n]={'mi':''+v,'ma':''+v,'c':1,'t':''+v};
> But when i later do a sum like res[v_n].t += v;
> it just concats the v to it instead of adding its values
> So there i have to convert it back to a Number() before adding.
> 
> On 21/05/10 10:01, Tom Sante wrote:
>> Yeah I'll try that, see if it gives me any clues.
>> Is there a way to run your code manually for debugging via the command
>> line with the JS engine the way couch calls it to build the view? (like
>> an interactive mode of couchjs)
>> 
>> On 21/05/10 04:59, Zachary Zolton wrote:
>>> Reduce functions can be tricky. My best advice: try log()'ing all your
>>> input and intermediary results; the answer usually jumps out to ya.
>>> 
>>> On Thursday, May 20, 2010, Tom Sante<tom.sante@gmail.com> wrote:
>>>> On 20/05/10 23:52, David Goodlad wrote:
>>>> 
>>>> On Thu, May 20, 2010 at 9:38 PM, Tom Sante<tom.sante@gmail.com> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> I have a reduce function like this:
>>>> [snip]
>>>> So for some reason if there is only 1 element to be reduced, on the
>>>> line of
>>>> res[v_n]={'mi':v,'ma':v,'c':1,'t':v};
>>>> v becomes v={} and not the actual number. Any ideas why?
>>>> 
>>>> I tested the reduce function with the command line 'js' and send it the
>>>> above test keys manually as function argument and then it does result
>>>> in the
>>>> correct return:
>>>> "01:00:000074" -> {raw: {mi: -0.213, ma: -0.213, c: 1, t: -0.213}}
>>>> "01:00:000084" -> {raw: {mi: -0.213, ma: -0.213, c: 1, t: -0.213}}
>>>> 
>>>> 
>>>> Sounds like you need to specify group_level; Try playing around in
>>>> Futon, you'll see a group_level dropdown.
>>>> 
>>>> Dave
>>>> 
>>>> 
>>>> Why would I need a group_level parameter?
>>>> My key is a simple string "01:00:000074".
>>>> Its my values don't get correctly generated by couchjs, since it does
>>>> out but proper values in normal commandline js.
>>>> 
>>>> var v = new Number(values[val][v_n]);
>>>> if(res.hasOwnProperty(v_n)){
>>>> res[v_n].mi = Math.min(v,res[v_n].mi);
>>>> res[v_n].ma = Math.max(v,res[v_n].ma);
>>>> res[v_n].c++;
>>>> res[v_n].t += v;
>>>> }else{
>>>> res[v_n]={'mi':v,'ma':v,'c':1,'t':v};
>>>> }
>>>> 
>>>> It seems that in the above part in the 'else' case the v isn't a
>>>> number but an empty object {}
>>>> 
>> 
> 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message