Riak Sort на MapReduce

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

В настоящее время я выполняю приведенный выше код для фазы сокращения запроса 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

person James    schedule 17.03.2012    source источник
comment
b['timestamp'] должно быть b[1]['timestamp'], а a['timestamp'] должно быть a[1]['timestamp'] согласно ответу из списка пользователей Basho: lists.basho.com/pipermail/riak-users_lists.basho.com/2012-март/   -  person awhie29urh2    schedule 15.07.2013


Ответы (1)


Попробуйте заключить возвращаемую часть в квадратные скобки, эффективно возвращая массив результатов.

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'];
    }
  )];
}
person Srdjan Pejic    schedule 19.03.2012
comment
Из-за этого я получаю странное количество рекурсивных результатов. Есть идеи, почему? - person James; 24.03.2012