2016-02-04 113 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

組件列表包含像空氣過濾器這樣的術語,我需要通過申請正則表達式 –

相關問題