Couchdb:按版本排序

Couchdb: sort by version

在 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

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

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

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

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

_count

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

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

  • 1(按 "major" 版本分组)
    • 键:4,值:1
    • 键:5,值:4
  • 2(按 "minor" 版本分组)
    • 键:4.2,值:1
    • 键:5.2,值:4
  • 3(按 "patch" 版本分组)
    • 键:4.2.3,值:1
    • 键:5.2.3,值:2
    • 键:5.2.4,值:1
    • 键:5.2.601,值:1
  • 4(在这种情况下你也可以只使用 group=true
    • 键:4.2.3.40,值:1
    • 键:5.2.3.4,值:1
    • 键:5.2.3.40,值:1
    • 键:5.2.4.30,值:1
    • 键:5.2.601.52,值:1