2016-02-04 4 views
1

Я столкнулся с проблемой при запросе mongodb из R (с использованием пакета rmongodb) с использованием регулярных выражений. Ниже приведен мой код:Rmongodb с использованием regex не работает должным образом

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, так как мне нужно передать регулярное выражение как переменную в списке. Например: Я думаю, что мы не можем {{$ regex ": paste0 (компонент [1]," * $ ")} для jsonStr. Не могли бы вы подтвердить это? –

+0

Не могли бы вы упомянуть ваши материалы более конкретно? Потому что мы не знаем, что такое «компонент». – dikesh

+0

Список компонентов содержит термины, такие как воздушный фильтр, который мне нужно передать с помощью regex –