如何将字符串传递给进行mongolite查询的函数?

时间:2016-12-19 23:14:49

标签: json r function mongolite

我必须进行很多mongoengine次查询,所以我尝试编写一个允许我不经常重复自己的函数。为查询运行的基本代码是:

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"}'

有没有办法以这种方式将字符串传递给JSON对象,这样我就可以编写一个接受字符串并返回mongolite查询结果的函数?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我删除了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