【问题标题】:rethinkdb python eqJoin with filter not workingrethinkdb python eqJoin 过滤器不起作用
【发布时间】:2021-11-11 05:23:18
【问题描述】:

我有两张桌子records

[
  {
    "payload": {
      "uuid": "123",
      "version": "1.0.0"
    },
    "record_id":"rec-123"
  },
  {
    "payload": {
      "uuid": "456",
      "version": "1.0.1"
    },
    "record_id":"rec-456"
  }
]

和records_master

[
  {
    "version": {
      "mode": 1
    },
    "id": "rec-123",
    "title": "Test-123"
  },
  {
    "version": {
      "mode": 0
    },
    "title": "Test-456",
    "id": "rec-456"
  }
]

我想在records 和version.mode 中获取匹配payload.uuid 和payload.version 的记录应该是records_master 中的1。

data = r.table("records").filter(
        lambda doc:
        (doc["payload"]["uuid"]== <some_value>) &
        (doc["payload"]["version"]== <some_version>)
    ).coerce_to("array")
    .run(connection)

这给了我所有records 匹配的payload.uuid 和payload.version。

但无法使其适用于 eqJoin 和 records-master

data = r.table('records').eq_join('record_id', r.table('records-master')).filter(
        lambda doc,master:
        (doc["payload"]["uuid"]== <some-value>) &
        (doc["payload"]["version"]== <some-version>) &
        (master["version"]["mode"] ==1)
    ).run(connection)

【问题讨论】:

    标签: rethinkdb rethinkdb-python


    【解决方案1】:

    这个查询对我有用

    data = r.table("records").filter(
            lambda doc:
            (doc["payload"]["uuid"]== <some_value>) &
            (doc["payload"]["version"]== <some_version>)
        ).eq_join('record_id', 
        r.table('records-master')
        )\
        .filter(lambda master:(master["right"]["version"]["mode"]== 1))\
        .coerce_to("array")\
        .run(connection)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      相关资源
      最近更新 更多