Golang Rethinkdb嵌套过滤器

时间:2016-12-11 16:22:28

标签: go rethinkdb gorethink rethinkdb-go

我正在尝试在Golang中为RethinkDB的嵌套对象的属性运行过滤器。但我确信我在这里遗漏了一些东西。

这是我得到的错误:

  

(func literal).Eq undefined(type 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")。表(" unverified_requests")。过滤器(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 个答案:

答案 0 :(得分: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()的reutrn值上调用Map(),这意味着放置.Eq()在关闭方法调用Map()

的括号之后