Bogdan Nechyporenko
Bogdan Nechyporenko

Reputation: 1346

Order by nested object in RethinkDB using Go driver

How is it possible using Go driver fetch data from RethinkDB in order by of nested object?

So let's imagine I have such json in my table:

[
    {
        "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 model is:

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"`
}

Example how it is possible to order by id:

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

I tried to order by beginning of time like this (thinking that the approach is the same as in ArangoDB, but apparently it is not):

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

I saw an example on the official site how it works by using native javascript driver

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)

But it is not really clear how to transform it to Go.

Any idea how to make it work?

Upvotes: 2

Views: 765

Answers (1)

neumino
neumino

Reputation: 4353

You can use a function, something like this:

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

Upvotes: 1

Related Questions