【问题标题】:map reduce "ORDER BY" 2 columns [closed]地图减少“ORDER BY”2列[关闭]
【发布时间】:2012-10-01 14:50:34
【问题描述】:

这是我的 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 ???
}

【问题讨论】:

  • 不明白为什么这个问题被关闭了,因为它找到了答案并且人们投票支持......

标签: nosql mapreduce couchdb


【解决方案1】:

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

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

您不需要为此使用 reduce 函数。

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

【讨论】:

  • 太棒了!我处理过(9999999 - doc.kudus),但你的负面技巧很巧妙,谢谢!
  • 值得一提的是,您不应该发出 doc 作为值。如果您希望文档发出 null 作为值并使用 include_docs=true 查询参数。
  • 是的,屋大维是对的。如果您将文档作为值发出,则您正在复制索引中的数据。如果您愿意,您可以发出肯定的 doc.kudus,但同样很容易从键计算,或者如果您在查询中使用 include_docs=true 来检索。
猜你喜欢
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多