Puedo insertar datos en mongodb alojado en mongolabs desde R, pero en el momento en que intento configurar el campo _id , aparece este error:
> data<-list("_id"="1fgthhy2334",text="abc",nums=c(1,2,3)) > db$insert(data) Error: can't use an array for _id data<-list("_id"=c("12334"),text="abc",nums=c(1,2,3)) > db$insert(data) Error: can't use an array for _id¿Alguna idea de por qué cree que estoy tratando de configurar la identificación en una matriz? Ninguna de mis variaciones parece funcionar.
¿Cómo puedo configurar un campo _id en particular para mi identificador seleccionado (único)?
si lo haces
jsonlite::toJSON(data) # {"_id":["1fgthhy2334"],"text":["abc"],"nums":[1,2,3]} verá que se convierte internamente en una matriz (ya que mongolite usa jsonlite para realizar la conversión)
Para insertarlo como un objeto en sí mismo, necesita los datos de entrada como un marco de datos, algo así como
data <- data.frame("_id" = "1fgthhy2334", text = "abc", nums = c(1,2,3)) data <- aggregate(nums ~ X_id + text, data, list) names(data)[1] <- "_id"Ahora se convierte en un objeto.
jsonlite::toJSON(data) # [{"_id":"1fgthhy2334","text":"abc","nums":[1,2,3]}]por lo que el inserto debería funcionar
m <- mongo(collection = "test", db = "test") m$insert(data) # Complete! Processed total of 1 rows. # $nInserted # [1] 1 # # $nMatched # [1] 0 # # $nRemoved # [1] 0 # # $nUpserted # [1] 0 # # $writeErrors # list() Y como verificación de cordura, intente insertarlo nuevamente y fallará porque ese _id ya existe
m$insert(data) Error: insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.test_id.$_id_ dup key: { : "1fgthhy2334" }