Fut*_*uth 6 r mongodb mongolite
我有一个mongo数据库,其中包含我要传递给某些R脚本进行分析的信息.我目前正在使用该mongolite包将信息传递mongo给R.
我在每个mongo条目中都有一个字段checkedByR,它是一个二进制文件,指示条目是否已经由R脚本分析.具体来说,我正在通过各自的mongo ID收集mongo条目,在条目上运行脚本,为checkedByR字段分配a 1,然后继续.
为了完整起见,我使用以下请求查询数据库:
library(mongolite)
mongoID <- "1234abcd1234abcd1234"
m <- mongolite::mongo(url = "mongodb://localhost:27017",
collection = "collection",
db = "database")
rawData <- m$find(query = paste0('{"_id": { "$oid" : "',mongoID,'" }}'),
fields = '{"_id" : 1,
"checkedByR" : 1,
"somethingToCheck" : 1}')
checkedByR <- 1
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用新checkedByR字段成功更新mongo条目.
我意识到包中update存在一个函数mongolite(请考虑:https://cran.r-project.org/web/packages/mongolite/mongolite.pdf),但我无法收集相关示例来帮助我完成更新处理.
任何帮助将不胜感激.
该mongo$update()函数接受一个query和一个update参数。您可以使用query来查找要更新的数据,并update告诉它要更新哪个字段。
考虑这个例子
library(mongolite)
## create some dummy data and insert into mongodb
df <- data.frame(id = 1:10,
value = letters[1:10]
)
mongo <- mongo(collection = "another_test",
db = "test",
url = "mongodb://localhost")
mongo$insert(df)
## the 'id' of the document I want to update
mongoID <- "575556825dabbf2aea1d7cc1"
## find some data
rawData <- mongo$find(query = paste0('{"_id": { "$oid" : "',mongoID,'" }}'),
fields = '{"_id" : 1,
"id" : 1,
"value" : 1}'
)
## ...
## do whatever you want to do in R...
## ...
## use update to query on your ID, then 'set' to set the 'checkedByR' value to 1
mongo$update(
query = paste0('{"_id": { "$oid" : "', mongoID, '" } }'),
update = '{ "$set" : { "checkedByR" : 1} }'
)
## in my original data I didn't have a 'checkedByR' value, but it's added anyway
Run Code Online (Sandbox Code Playgroud)
该rmongodb库不再在 CRAN 上,因此以下代码将不起作用
对于更复杂的结构和更新,您可以执行以下操作
library(mongolite)
library(jsonlite)
library(rmongodb) ## used to insert a non-data.frame into mongodb
## create some dummy data and insert into mongodb
lst <- list(id = 1,
value_doc = data.frame(id = 1:5,
value = letters[1:5],
stringsAsFactors = FALSE),
value_array = c(letters[6:10])
)
## using rmongodb
mongo <- mongo.create(db = "test")
coll <- "test.another_test"
mongo.insert(mongo,
ns = coll,
b = mongo.bson.from.list(lst)
)
mongo.destroy(mongo)
## update document with specific ID
mongoID <- "5755f646ceeb7846c87afd90"
## using mongolite
mongo <- mongo(db = "test",
coll = "another_test",
url = "mongodb://localhost"
)
## to add a single value to an array
mongo$update(
query = paste0('{"_id": { "$oid" : "', mongoID, '" } }'),
update = '{ "$addToSet" : { "value_array" : "checkedByR" } }'
)
## To add a document to the value_array
mongo$update(
query = paste0('{"_id": { "$oid" : "', mongoID, '" } }'),
update = '{ "$addToSet" : { "value_array" : { "checkedByR" : 1} } }'
)
## To add to a nested array
mongo$update(
query = paste0('{"_id": { "$oid" : "', mongoID, '" } }'),
update = '{ "$addToSet" : { "value_doc.value" : "checkedByR" } }'
)
rm(mongo); gc()
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅mongodb 更新文档
| 归档时间: |
|
| 查看次数: |
3358 次 |
| 最近记录: |