Golang Rethinkdb вложенный фильтр

Я пытаюсь запустить фильтр для свойства вложенного объекта для RethinkDB в Голанге. Но я уверен, что мне чего-то здесь не хватает.

Это ошибка, которую я получаю:

(литерал func).Eq не определено (тип func (gorethink.Term) gorethink.Term не имеет поля или метода Eq)

Вот мой код:

type User struct {
    Id        string `json:"id,omitempty"`
    FirstName string `json:"firstName,omitempty"`
    LastName  string `json:"lastName,omitempty"`
    Email     string `json:"email,omitempty"`
    Password  string `json:"password,omitempty"`
    Salt      string `json:"salt,omitempty"`
}

type UnverifiedUserRequest struct {
    Id    string `json:"id,omitempty"`
    Token string `json:"token,omitempty"`
    User  User   `json:"user,omitempty"`
}

db.Table("unverified_requests").Filter(func(row r.Term) r.Term {
    return row.Field("user").Map(func(user r.Term) r.Term {
        return user.Field("email")
    }.Eq(email))
}).Run(session)

ОБНОВЛЕНИЕ 1

После внесения изменений, как предложено @icza, программа работает нормально. Но я получаю следующую ошибку во время выполнения:

gorethink: невозможно преобразовать OBJECT в SEQUENCE в: r.DB("uc_dev").Table("unverified_requests").Filter(func(var_‌ 5 r.Term) r.Term { return var_5.Field("user").Map(func(var_6 r.Term) r.Term { return var_6.Field("email") }).Eq("myemail@gmail.com") })

1 ответ

Решение

Неверная скобка. Вместо }.Eq(email)) использование }).Eq(email):

db.Table("unverified_requests").Filter(func(row r.Term) r.Term {
    return row.Field("user").Map(func(user r.Term) r.Term {
        return user.Field("email")
    }).Eq(email)
}).Run(session)

Вы пытались позвонить Eq() на литеральном аргументе функции, который передается Map(), Это явно не типа gorethink.Term, но возвращаемое значение gorethink.Map() есть, так что звоните Eq() на возвращаемую стоимость Map(), что означает положить .Eq() после скобки, закрывающей вызов метода Map(),

Другие вопросы по тегам