在RethinkDB上具有OR条件的两个过滤器

时间:2016-09-14 20:04:56

标签: go rethinkdb

我是一个结构:

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"
}

如何以更简单的方式使其工作?

1 个答案:

答案 0 :(得分:2)

我将在这里召唤@ daniel-cannon,但我认为这正是您正在寻找的内容,并将极大地简化此查询并将其简化为一个查询。但只有两个提示:

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)

我希望这有帮助!