gpt4 book ai didi

go - RethinkDB - 在同一数据集和表中按值使用 Match() 进行过滤

转载 作者:数据小太阳 更新时间:2023-10-29 03:16:05 25 4
gpt4 key购买 nike

所以,由于我太笨了,显然无法自己解决这个问题,所以我会在 SO 上请教你们更好的人。

基本上我有一个如下所示的数据结构:

....,
{
"id": 12345

....

"policy_subjects": [
{
"compiled": "^(user|max|anonymous)$",
"template": "<user|max|anonymous>"
},
{
"compiled": "^max$",
"template": "max"
}
]
....
}

compiled 是一个“已编译”的正则表达式

模板 是没有正则表达式修饰符的相同正则表达式


我想要的是使用“编译”值在 RethinkDB 中执行一个简单的查询,并将其与字符串匹配,例如“max”。

Basically 

r.table("regex_policies").filter(function(policy_row) {
return "max".match("(?i)"+policy_row("policy_subjects")("compiled"))
}

Is what i want to do (+case-insensitive search)

数据库中当然有很多 policy_subjects,因此在此示例中,结果应该是与“max”匹配的整个数据集(1 个结果)。由于“max”在这种情况下存在两次,并且它匹配两个正则表达式(一次就足够了)。

“foobar”在这个例子中同样会产生 0 个结果,因为任何编译的正则表达式都不匹配“foobar”。

有谁知道如何做这个相对简单的查询?

最佳答案

你肯定想在这里使用 r.expr 我让这个例子起作用:

r.expr([{
"id": 12345,
"policy_subjects": [
{
compiled: "^(user|max|anonymous)$",
template: "<user|max|anonymous>"
},
{
compiled: "^max$",
template: "max"
}
]
}]).merge(function(policy_row) {
return {
"policy_subjects": policy_row("policy_subjects").filter(function(item){
return r.expr("max").match(r.expr("(?i)").add(item("compiled"))).ne(null);
})
}
})

max 更改为不匹配的其他内容,返回的文档中没有 policy_subjects 中的元素。

例如,将 max => 更改为 wat(我最喜欢的测试字符串)如下所示:

.merge(function(policy_row) {  
return {
"policy_subjects": policy_row("policy_subjects").filter(function(item){
return r.expr("wat").match(r.expr("(?i)").add(item("compiled"))).ne(null);
})
}
})

结果是:

[
{
"id": 12345 ,
"policy_subjects": [ ]
}
]

我认为您减少到您想要的一个 policy_subject 文档的逻辑对于您的用例来说可能有点主观,所以我不确定正确的答案是什么,但您可以使用 .reduce(...) 只返回最右边的值。

关于go - RethinkDB - 在同一数据集和表中按值使用 Match() 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35287733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com