英文:
Golang Rethinkdb nested filter
问题
我正在尝试在Golang中使用RethinkDB对嵌套对象的属性运行过滤器,但我确定我在这里漏掉了一些东西。
这是我得到的错误:
(func literal).Eq undefined (type func(gorethink.Term) gorethink.Term has no field or method 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: Cannot convert OBJECT to SEQUENCE in: 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") })
英文:
I am trying to run a filter on a property of a nested object for RethinkDB in Golang. But I am sure that I am missing something here.
This is the error I am getting:
> (func literal).Eq undefined (type func(gorethink.Term) gorethink.Term has no field or method Eq)
Here is my code:
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)
UPDATE 1
After making changes as suggested by @icza, the program builds fine. But I am getting the following error at runtime:
> gorethink: Cannot convert OBJECT to SEQUENCE in: 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
得分: 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)
你试图在传递给Map()
的函数字面量参数上调用Eq()
。显然,它不是gorethink.Term
类型,但gorethink.Map()
的返回值是,所以在Map()
的括号关闭后调用Eq()
,也就是将.Eq()
放在Map()
方法调用的括号之后。
英文:
A misplaced parenthesis. Instead of }.Eq(email))
use }).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)
You tried to call Eq()
on the function literal argument that is passed to Map()
. It is obviously not of type gorethink.Term
, but the return value of gorethink.Map()
is, so call Eq()
on the reutrn value of Map()
, which means put the .Eq()
after the parenthesis that closes the method call Map()
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论