gpt4 book ai didi

R : Updating an entry in mongodb using mongolite

转载 作者:IT老高 更新时间:2023-10-28 13:29:02 31 4
gpt4 key购买 nike

我有一个 mongo 数据库,其中包含我传递给一些 R 脚本进行分析的信息。我目前正在使用 mongolite 包将信息从 mongo 传递到 R

我在每个 mongo 条目中都有一个名为 checkedByR 的字段,它是一个二进制文件,指示条目是否已经被 R 脚本分析过。具体来说,我通过其各自的 mongo ID 收集一个 mongo 条目,在该条目上运行脚本,为 checkedByR 字段分配 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

但是,我无法使用新的 checkedByR 字段成功更新 mongo 条目。

我意识到 mongolite 包中存在 update 函数(请考虑:https://cran.r-project.org/web/packages/mongolite/mongolite.pdf),但我无法收集相关示例来帮助我完成更新过程。

任何帮助将不胜感激。

最佳答案

mongo$update() 函数采用 queryupdate 参数。您使用 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

更新

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()

mongodb update文档以获取更多详细信息

关于R : Updating an entry in mongodb using mongolite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37631954/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com