我有以下字段的记录:{ version: "2.4.1-5dev" }
。我想按版本订购/索引它们。文档应按版本/构建组合排序(按部分数字值递增)。是否可能,如果可能,我该怎么做?
编辑:
我仍然无法按版本索引/订购。同样,我希望能够按版本排序,甚至,如果其中有“dev”这样的词。
在python中,pkg_resources.parse_version()
有助于比较两个版本pkg_resources.parse_version(ver1) > pkg_resources.parse_version(ver2)
,它甚至适用于有点疯狂的版本命名。
我是否有可能将pkg_resources.parse_version()用作索引/排序的cmp函数,或者在尝试按版本字段排序文档时在查询中获得相同的结果?
答案 0 :(得分:1)
您可以使用函数创建索引,在JavaScript中它就像
r.table("product").indexCreate("version", function(product) {
return r.branch(
product("version").match('dev'),
null,
product("version").split('.').concatMap(function(version) {
return version.split('-')
}).map(function(num) {
return num.coerceTo('NUMBER')
})
})
这可行,因为null
当前未存储在二级索引中,但此行为可能会发生变化 - 请参阅https://github.com/rethinkdb/rethinkdb/issues/1032
r.branch中的第三个参数,将.
和-
上的值拆分,然后将每个值强制转换为数字。例如
r.expr("2.4.1-5").split('.').concatMap(r.row.split('-')).map(r.row.coerceTo('NUMBER'))
// will return [2,4,1,5]