简体   繁体   English

如何获得按“值”值降序排列的映射/归约结果?如果还可以使用列表函数来实现这一点?

[英]How can I get a map/reduce result which is sorted within descending order of the “value” value?if also using list function can achieve that?

I have view map and reduce like this: Map: 我有这样的视图地图和减少:地图:

   function(doc) {
           if(doc.type){
            var usersLength = doc.users.length;
            for (var i = 0; i < usersLength ; i++) {
                    emit([doc.users[i].userid,doc.Service.ownId], 1);
                }
            }
        }

Reduce: 降低:

 function(keys, values, rereduce)
    {
      return sum(values);
    }

Then invoke the view like this: _design/aaa/_view/getUserId?group=true&group_level=2&startkey=["111111"]&endkey=["111111",{}] 然后像这样调用视图: _design/aaa/_view/getUserId?group=true&group_level=2&startkey=["111111"]&endkey=["111111",{}]

I can get the result set below: 我可以得到以下结果集:

{"rows":[
{"key":["111111",""],"value":7},
{"key":["111111","FFFF26"],"value":1},
{"key":["111111","FFFF44"],"value":7},
{"key":["111111","FFFF34"],"value":2}
]}

However, I want to get the result set above sorted within descending order of the "value" value. 但是,我想让上面的结果集按照“值”值的降序排列。 if also using list function can achieve that? 如果还使用列表功能可以实现这一目标? the following would be expected results: 以下是预期结果:

{"rows":[
{"key":["111111",""],"value":7},
{"key":["111111","FFFF44"],"value":7},
{"key":["111111","FFFF34"],"value":2},
{"key":["111111","FFFF26"],"value":1}
]}

If you want to sort the result set you have to one that is sorted by value descending you can sort with a comparator callback: 如果要对结果集进行排序,则必须使用按值降序排序的结果集,可以使用比较器回调进行排序:

// ES6 Syntax
let originalResult = {
"rows":[
  {"key":["111111",""],"value":7},
  {"key":["111111","FFFF26"],"value":1},
  {"key":["111111","FFFF44"],"value":7},
  {"key":["111111","FFFF34"],"value":2}
]}

let newResult = {
  rows: originalResult.rows.sort((a, b) => b.value - a.value)
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM