sql >> Database >  >> NoSQL >> MongoDB

R:Een vermelding in mongodb bijwerken met behulp van mongoliet

de mongo$update() functie duurt een query en een update argument. U gebruikt de query om de gegevens te vinden die u wilt bijwerken, en de update om het te vertellen welk veld moet worden bijgewerkt.

Overweeg dit voorbeeld

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

Bijwerken

de rmongodb bibliotheek is niet langer op CRAN, dus de onderstaande code werkt niet

En voor complexere structuren en updates kun je dingen doen als

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

zie mongodb-update documentatie voor meer details




  1. Hoe db-referenties te gebruiken met reactieve Spring Data MongoDB?

  2. Werk een waarde in MongoDB bij op basis van de huidige waarde

  3. Django Channels Error - Kan BACKEND 'asgi_redis.RedisChannelLayer' niet importeren

  4. Resultaten herhalen met een externe API-aanroep en findOneAndUpdate