0

I have two tables records

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

and records_master

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

I want to get records for matching payload.uuid and payload.version in records and version.mode should be 1 in records_master.

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

This gives me all records for a matching payload.uuid and payload.version .

But unable to make it work for eqJoin with 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)
Dibshare
  • 95
  • 2
  • 13

1 Answers1

0

This query worked for me

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)
Dibshare
  • 95
  • 2
  • 13