RethinkDB:​​版本的订单/索引 - 构建

时间:2014-06-08 10:18:48

标签: rethinkdb

我有以下字段的记录:{ 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函数,或者在尝试按版本字段排序文档时在查询中获得相同的结果?

1 个答案:

答案 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]