2016-12-19 13 views
2

mongoengineというクエリをたくさん作成する必要があるため、私は自分自身をあまり頻繁に繰り返さないようにする関数を作成しようとしました。mongoliteクエリを作成する関数に文字列を渡すにはどうすればよいですか?

library(mongolite)  
m <- mongo('test', 'test', url = testurl) 
mydata <- m$find('{"field1": "foo", "field2": "bar"}') 

そして、私の機能は次のとおりです:クエリのために実行するための基本的なコードがある

get_mongo_data <- function(field1, field2, mongoconnection = m){ 
    mongo_string = toJSON(paste0('\'{\"field1": \"', field1, 
           '\", "field2": \"', field2, '\"}\'')) 
    dataset <- mongoconnection$find(mongo_string) 
    return(dataset) 
} 

しかし、私はそれを使用しようとすると、それが失敗しました。

mydata <- get_mongo_data('foo', 'bar') # fails 

が起こっているのかを見るために、私は私の機能が実際にクエリに渡すいたものを見て:

> (mongo_string = toJSON(paste0('\'{\"field1": \"', field1, 
           '\", "field2": \"', field2, '\"}\''))) 
["'{\"field1\": \"foo\", \"field2\": \"bar\"}'"] 

私はそれが一致していないことがわかります。文字列の両側に["を追加します。しかし、toJSON機能せず、私はError: Invalid JSON object: '{"field1": "foo", "field2": "bar"}'

は、私は、文字列を受け取り、mongoliteクエリの結果を返す関数を書くことができるように、このようにJSONオブジェクトに文字列を渡すためにどのような方法があり得ますか?

答えて

0

解決策が見つかりました。 toJSON()コールを削除し、文字列の両端に必要なと思われるものを削除しました(')。次のコードは動作します。

library(mongolite)  
m <- mongo('test', 'test', url = testurl) 
mydata <- m$find('{"field1": "foo", "field2": "bar"}') 

get_mongo_data <- function(field1, field2, mongoconnection = m){ 
    mongo_string = paste0('{\"field1": \"', field1, 
         '\", "field2": \"', field2, '\"}') 
    dataset <- mongoconnection$find(query = mongo_string) 
    return(dataset) 
} 

mydata <- get_mongo_data('foo', 'bar') # succeeds 
関連する問題