map减少“ORDER BY”2列

时间:2012-10-01 14:50:34

标签: nosql mapreduce couchdb

这是我的SQL查询,其中列出了最年轻和最有才华的狗:

SELECT * FROM dog
ORDER BY dog.age ASC, dog.kudus DESC

如何将其转换为map / reduce?

// Map
function (doc) {
  emit([doc.age, doc.kudus], doc);
}
// Reduce
function (keys, values) {
  return ???
}

1 个答案:

答案 0 :(得分:4)

使用地图时,您正在使用创建1维索引。您遇到的问题是您希望结果显示为'kudus'属性的排序顺序与年龄键的asc顺序相反。这是一个简单的修复:

// map
function(doc) {
   emit([doc.age, -doc.kudus], doc);
}

您不需要减少功能。

看到负数有点好笑,但它会让你获得正确的排序顺序。你可以使用Math.abs(key [1])或使用value.kudus来获得真正的价值。