根据多个值

时间:2015-11-18 19:53:41

标签: rethinkdb rethinkdb-python

我在RethinkDB表中的json下面

[{"pid": 0,
  "sk": [
  {
    "sid": 30,
    "et": 3
  },
  {
    "sid": 22,
    "et": 10
  },
  {
    "sid": 30,
    "et": 10
  }
  ],
"wc": [
  {
    "wid": 29,
    "et": 8
  },
  {
    "wid": 30,
    "et": 2
  },
],
"dom": [
  {
    "did": 7,
    "et": 2
  },
  {
    "did": 6,
    "et": 3
  }
],
"ex": 17,
"av": 12,
"lc": "FRA"
  }

像这样,RethinkDB表中有数千行。

我的目标是搜索sk,wc的数据

例如:输入可能是

“SK”:[{ “SID”:21, “等”:5},{ “SID”:21, “等”:5}] 在上述条件下过滤后,应再次对结果数据集过滤wc字段 “WC”:[{ “WID”:1, “等”:7},{ “WID”:4 “等”:5},{ “WID”:0, “ET”:7}]

我需要包含在给定输入中的输出记录 比如表中的例子, sk:[{sid:2,et:8},{sid:3,et:6},{sid:3,et:7},{sid:4,et:9}]应显示在输出数据集中输入字段如下 [{sid:3,et:7},{sid:4,et:9}]

当我在一个元组中有{sid:et}时,我使用了下面的查询:

 r.db('testdb').table('f_tab').
 filter(
 {
 "sk": [{"0":"8"},{"1":"5"},{"8":"5"},{"3":"8"},{"12":"4"}]
 }).filter(
 {
  "wc": [{"0":"7"},{"7":"9"},{"2":"6"},{"8":"4"},{"4":"7"}]
 }).getField('pid')

现在我已经拆分了sid和et值,以便更好地管理服务器端代码

尝试使用r.row内部过滤器,但它不起作用 如何根据python中的要求进行过滤?

从性能的角度来看,以这种方式执行嵌套字段搜索的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这样做你想要的吗?

r.table('f_tab').filter(
  lambda row: r.expr([{'sid': 21, 'et': 5}, ...]).set_difference(row['sk']).is_empty()
).filter(
  lambda row: r.expr([{'wid': 22, 'et': 6}, ...]).set_difference(row['wc']).is_empty()
)['pid']