Couchdb:按版本排序

时间:2016-06-24 10:05:46

标签: mapreduce couchdb

是否有一种优雅的方法可以在Couchdb中按版本字段(存储为字符串)进行排序?

也就是说,如果我有像 major.minor.build.revision (5.5.1.14)这样的版本架构,我该如何发出密钥以确保以下语句按照特定顺序排列:

4.2.3.40
5.2.3.4
5.2.3.40
5.2.4.30
5.2.601.52

1 个答案:

答案 0 :(得分:1)

我认为你在谈论map / reduce函数,假设有一个简单的解决方案:

只需通过.拆分版本密钥,然后直接发出该数组。 CouchDB的view collation将按照您可能期望的方式对密钥进行排序。

function (doc) {
  emit(doc.version.split('.'));
}

您甚至可以使用group_level视图参数按每个层/级别聚合您的版本。首先,将以下内容添加为reduce函数:

_count

这是built-in reduce function,它将计算给定查询中的行数。

鉴于group_level的以下值,您将看到以下结果。 (给出你的示例文档)

  • 1(按“主要”版本分组)
    • key:4,value:1
    • key:5,value:4
  • 2(按“次要”版本分组)
    • key:4.2,value:1
    • key:5.2,value:4
  • 3(按“补丁”版本分组)
    • key:4.2.3,value:1
    • key:5.2.3,value:2
    • key:5.2.4,value:1
    • key:5.2.601,value:1
  • 4(在这种情况下你也可以使用group=true
    • key:4.2.3.40,value:1
    • key:5.2.3.4,value:1
    • key:5.2.3.40,value:1
    • key:5.2.4.30,value:1
    • key:5.2.601.52,value:1