使用Go驱动程序在RethinkDB中按嵌套对象排序

时间:2014-10-16 20:21:13

标签: go rethinkdb

如何使用Go驱动程序从嵌套对象按顺序获取RethinkDB中的数据?

所以,让我想象一下,我的桌子上有这样的json:

[
    {
        "id": "1",
        "date": "2001-01-15",
        "time": {
            "begin": "09:00",
            "end": "10:30"
        }
    },
    {
        "id": "2",
        "date": "2001-01-16",
        "time": {
            "begin": "08:30",
            "end": "10:30"
        }
    }
]

Go模型是:

type MyTime struct {
    Begin time.Time `json:"begin"`
    End   time.Time `json:"end"`
}

type Something struct {
    Id      string `json:"id"`
    Date    time.Time `json:"date"`
    Time    MyTime `json:"time"`
}

示例如何通过id订购:

var result []Something
db.Table("someTable").OrderBy("id").Run(session).All(&result)

我试着按照这样的时间开始订购(认为方法与ArangoDB相同,但显然不是):

 var result []Something
 db.Table("someTable").OrderBy("time.begin").Run(session).All(&result)

我在官方网站上看到了一个使用原生javascript驱动程序

的工作原理的例子
Example: Use nested field syntax to sort on fields from subdocuments. (You can also 
create indexes on nested fields using this syntax with indexCreate.)

r.table('user').orderBy(r.row('group')('id')).run(conn, callback)

但目前还不清楚如何将其转化为Go。

知道如何让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

你可以使用这样的函数:

db.Table("someTable").OrderBy(func(row Term) Term {
    return row.Field("time").Field("begin")
}).Run(session).All(&result)