如何将字符串传递给进行 mongolite 查询的函数?
How do I pass strings into a function that makes mongolite queries?
我必须进行很多 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 对象,这样我就可以编写一个接受字符串和 returns [的结果的函数=18=]查询?
我找到了解决办法。我删除了 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
我必须进行很多 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 对象,这样我就可以编写一个接受字符串和 returns [的结果的函数=18=]查询?
我找到了解决办法。我删除了 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