2012-03-17 67 views
0
function(values) { 
    return values.sort(
     function(a, b) { 
      return b['timestamp'] - a['timestamp']; 
     } 
    ); 
} 

我目前正在执行Riak MapReduce查询的reduce阶段的上述代码,但它没有通过timestamp key的值正确排序。任何想法为什么?Riak对MapReduce的排序

我使用了Riak Python客户端,这是完整的代码,其包含上述减少步骤:

query = riak_client.add('bucket') 

query.map("function(v) { var data = JSON.parse(v.values[0].data); if (data.item == 'A') { return [[v.key, data]]; } return []; }") 

query.reduce("function(values) { return values.sort(function(a, b) { return b['timestamp'] - a['timestamp']; }); }") 

for result in query.run(): 
    print result 
+0

'B [ '戳']'应该是'B [1] [ '戳']'和'一个[ '戳']'应根据Basho用户列表中的回复,可以是'[1] ['timestamp']':http://lists.basho.com/pipermail/riak-users_lists.basho.com/2012-March/007895.html – ekillaby 2013-07-15 19:15:29

回答

2

尝试包裹方括号内的返回部分,有效地返回结果的数组。

function(values) { 
    return values.sort(
    function(a, b) { 
     return b['timestamp'] - a['timestamp']; 
    } 
); 
} 

有它看起来像这样:

function(values) { 
    return [values.sort(
    function(a, b) { 
     return b['timestamp'] - a['timestamp']; 
    } 
)]; 
} 
+0

I由于这个,会得到奇怪的递归结果。任何想法为什么? – James 2012-03-23 21:19:32