我是一个结构:
df['Max'] = df.High.cummax()
df
我当前的type Talk struct {
Id string `gorethink:"id,omitempty"`
MatchId string
UserIdX string
UserIdY string
UserNameX string
UserNameY string
CreatedAt time.Time
}
结构如下所示:
Talk
如何通过单个查询检索谈话,其中:
(UserIdX == talk.UserIdX AND UserIdY == talk.UserIdY)OR(UserIdX == talk.UserIdY和UserIdY == talk.UserIdX)
我实际上是这样做的:
{
"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"
}
如何以更简单的方式使其工作?
答案 0 :(得分:2)
我将在这里召唤@ daniel-cannon,但我认为这正是您正在寻找的内容,并将极大地简化此查询并将其简化为一个查询。但只有两个提示:
r.And
和r.Or
和他们的两个用例非常适合做一些棘手的逻辑条件。
.Filter
提供匿名函数,以便使用简化的r.Row
模式执行一些丑陋的操作。 r.Table("talks").Filter(func(talk r.Term) r.Term {
return r.Or(
r.And(talk.Field("UserIdX").Eq(UserIdX), talk.Field("UserIdX").Eq(UserIdY)),
r.And(talk.Field("UserIdY").Eq(UserIdX), talk.Field("UserIdX").Eq(UserIdY)),
)
}).Run(api.Sess)
我希望这有帮助!