sql >> Databáze >  >> NoSQL >> MongoDB

R :Aktualizace záznamu v mongodb pomocí mongolitu

mongo$update() funkce přebírá query a update argument. Používáte query vyhledejte data, která chcete aktualizovat, a update říct, které pole má aktualizovat.

Zvažte tento příklad

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

Aktualizovat

rmongodb knihovna již není na CRAN, takže níže uvedený kód nebude fungovat

A pro složitější struktury a aktualizace můžete dělat věci jako

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

viz aktualizace mongodb dokumentaci pro další podrobnosti




  1. Textové vyhledávání MongoDB A více vyhledávacích slov

  2. Pole Concat používající PyMongo selhala s neznámým skupinovým operátorem '$concatArrays'

  3. Jak třídit dokumenty na základě délky pole Array

  4. Jak obejít nedostatek transakcí v MongoDB?