根据多个值过滤 RethinkDB 行中的嵌套字段
Filter nested fields in RethinkDB rows based on multiple values
我在 RethinkDB 中有以下 json table
[{"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中有几千行table。
我的Objective是搜索sk,wc的数据
例如:输入可以是
"sk":[{"sid":21,"et":5},{"sid":21,"et":5}]
根据上述条件过滤后,应再次针对 wc 字段过滤结果数据集
"wc":[{"wid":1,"et":7},{"wid":4,"et":5},{"wid": 0,"et":7}]
我需要给定输入中包含的输出记录
例如在 table 中,
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 中的要求进行过滤?
从性能的角度来看,以这种方式执行嵌套字段搜索的最佳方法是什么?
这是你想要的吗?
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']
我在 RethinkDB 中有以下 json table
[{"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中有几千行table。
我的Objective是搜索sk,wc的数据
例如:输入可以是
"sk":[{"sid":21,"et":5},{"sid":21,"et":5}] 根据上述条件过滤后,应再次针对 wc 字段过滤结果数据集 "wc":[{"wid":1,"et":7},{"wid":4,"et":5},{"wid": 0,"et":7}]
我需要给定输入中包含的输出记录 例如在 table 中, 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 中的要求进行过滤?
从性能的角度来看,以这种方式执行嵌套字段搜索的最佳方法是什么?
这是你想要的吗?
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']