使用正则表达式的 Rmongodb 无法按预期工作

Posted

技术标签:

【中文标题】使用正则表达式的 Rmongodb 无法按预期工作【英文标题】:Rmongodb using regex does not work as expected 【发布时间】:2016-02-04 05:41:02 【问题描述】:

我在使用正则表达式从 R(使用 rmongodb 包)查询 mongodb 时遇到问题。以下是我的代码:

buf <- mongo.bson.buffer.create()
regex <- mongo.regex.create("air filter*$", options="i")
mongo.bson.buffer.append.regex(buf, "keyword", regex)
query <- mongo.bson.from.buffer(buf)
res <- mongo.find.all(mongo,collection,query)

但是我从数据库中得到了“res”的空结果。但是,当我直接检查数据库中的正则表达式时,它给了我有效的结果。当我在上述查询(eg: "air filter") 中给出不带正则表达式的关键字名称时,它可以正常工作。

我已经尝试了所有可能的组合,但都是徒劳的。

以下是示例文档

[  
     
      "_id":ObjectId("55dcdc72473fdf86c0020d96"),
      "_class":"",
      "keyword":"air filter",
      "synonyms":[  

      ]
   ,
     
      "_id":ObjectId("55dcdc72473fdf86c0020e0f"),
      "_class":"",
      "keyword":"cabin air filter",
      "synonyms":[  

      ]
   ,
     
      "_id":ObjectId("55dcdc79473fdf86c002143b"),
      "_class":"",
      "keyword":"secondary air filter",
      "synonyms":[  

      ]
   
]

注意:我尝试过 json 字符串,但无法使用,因为我需要将变量作为输入正则表达式传递,即我使用paste0(component[1], "*$") 创建正则表达式,其中组件列表包含空气过滤器等术语。

您能否提供一些指导?

谢谢!

【问题讨论】:

你能发布一些示例文档吗? inside-r.org/packages/cran/rmongodb/docs/mongo.regex 我要您收藏的文件。 对不起!我的集合的关键字字段包含诸如空气过滤器、机舱空气过滤器、二次空气过滤器等术语。查询有多个匹配项。 "_id" : ObjectId("55dcdc72473fdf86c0020d96"), "_class" : "", "keyword" : "空气过滤器", "同义词" : [ ] "_id" : ObjectId( “55dcdc72473fdf86c0020e0f”),“_class”:“”,“关键字”:“机舱空气过滤器”,“同义词”:[] “_id”:ObjectId(“55dcdc79473fdf86c002143b”),“_class”:“”,“关键字" : "二次空气过滤器", "同义词" : [ ] 【参考方案1】:

这是我尝试过的,它正在工作

library(rmongodb)
mongo <- mongo.create(host = "localhost", db = "test")

components <- list("air filter", "engine oil")

for (component in components) 
    jsonStr <- paste0('"keyword" : "$regex" : "', component, '$"')
    mongo.bson.from.JSON(jsonStr)
    res <- mongo.find.all(mongo, "test.coll", mongo.bson.from.JSON(jsonStr))
    print(res)

【讨论】:

感谢您的意见。但我拒绝使用 json,因为我需要将正则表达式作为变量传递给列表。例如:我认为我们不能为 jsonStr 做 "$regex": paste0(component[1], "*$")。你能确认一下吗? 您能否更具体地提及您的意见?因为我们不知道component是什么。 组件列表包含像空气过滤器这样的术语,我需要通过应用正则表达式 请编辑您的问题并提及所有输入。 请提供components类似组件的列表值

以上是关于使用正则表达式的 Rmongodb 无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 Vim 的正则表达式替换多个文件的单词在 sed 中无法按预期工作

正则表达式无法与 C++ regex_match 一起按预期工作

PostgreSQL中的正则表达式无法按预期工作

使用正则表达式查找命令未按预期工作

C++ 11 正则表达式未按预期返回组

LDAP olcAccess 正则表达式未按预期工作