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
在 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