2
一个OR条件我有一个结构:两个过滤器与RethinkDB
type Talk struct {
Id string `gorethink:"id,omitempty"`
MatchId string
UserIdX string
UserIdY string
UserNameX string
UserNameY string
CreatedAt time.Time
}
我现在Talk
结构是这样的:
{
"CreatedAt": Wed Sep 14 2016 21:36:26 GMT+02:00 ,
"MatchId": "172d51fa-438b-49a5-bbe5-422377f09336" ,
"UserIdX": "acc4e0b6-d33b-4755-9c0a-ae5309c2ba75" ,
"UserIdY": "03f76d8b-ed6a-4c0f-9cde-27b17c9e7cdb" ,
"UserNameX": "Barbara" ,
"UserNameY": "Louis" ,
"id": "ead3f1b0-b242-4c6d-8027-a59572b58649"
}
我如何可以检索谈话,用单查询,其中:
(UserIdX == talk.UserIdX和UserIdY == talk.UserIdY)OR(UserIdX == talk.UserIdY和UserI DY == talk.UserIdX)
我真正做到这一点像下面这样:
func (talk *Talk) GetTalkByUsersId() bool {
talk1 := new(Talk)
talk2 := new(Talk)
curs, _ := r.Table("Talks").
Filter(r.Row.Field("UserIdX").Eq(talk.UserIdX)).
Filter(r.Row.Field("UserIdY").Eq(talk.UserIdY)).
Run(api.Sess)
curs2, _ := r.Table("Talks").
Filter(r.Row.Field("UserIdX").Eq(talk.UserIdY)).
Filter(r.Row.Field("UserIdY").Eq(talk.UserIdX)).
Run(api.Sess)
curs.One(&talk1)
curs2.One(&talk2)
if talk1.Id == "" && talk2.Id == "" {
return false
}
if talk1.Id != "" {
talk.copyTalk(talk1)
} else {
talk.copyTalk(talk2)
}
return true
}
我怎样才能得到这个以更简单的方式工作?
谢谢@dalanmiller!这看起来应该起作用,有几个非常小的Go语法错误(我提交了一个解决这些问题的编辑),但我认为它应该回答@Fantasim的问题。 –
我以前见过or和和功能,但我没有意识到它的工作原理,非常感谢! – Fantasim