2016-02-04 151 views
1

我在使用正则表达式从R(使用rmongodb包)查询mongodb时遇到了一个问题。以下是我的代码:使用正则表达式的Rmongodb不能按预期工作

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")中给出没有正则表达式的关键字名称时,它工作正常。

我试过所有可能的组合,但徒劳无功。

以下是例子docoments

[ 
    { 
     "_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], "*$")创建正则表达式,其中组件列表包含像空气过滤器等术语。

您能否提供一些指导?

谢谢!

+0

你可以张贴一些示例文件? – dikesh

+0

http://www.inside-r.org/packages/cran/rmongodb/docs/mongo.regex –

+0

我在索要你收藏的文件。 – dikesh

回答

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) 
} 
+0

感谢您的输入。但是我拒绝使用json,因为我需要在列表中传递正则表达式作为变量。例如:我认为我们不能对jsonStr执行{“$ regex”:paste0(component [1],“* $”)}。你能确认吗? –

+0

您能否更具体地提及您的输入?因为我们不知道什么是“组件”。 – dikesh

+0

组件列表包含像空气过滤器这样的术语,我需要通过申请正则表达式 –

相关问题