我可以将数据插入来自R的mongolabs托管的mongodb
,但是当我尝试设置_id
字段时,我收到此错误:
> 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
任何想法为什么它认为我试图将id设置为数组?我的变化似乎都没有用。
如何将特定_id
字段设置为我选择的(唯一)标识符?
答案 0 :(得分:1)
如果你这样做
jsonlite::toJSON(data)
# {"_id":["1fgthhy2334"],"text":["abc"],"nums":[1,2,3]}
你会看到它在内部转换为数组(mongolite
使用jsonlite
进行转换)
要将其作为对象本身插入,您需要输入数据作为data.frame,如
data <- data.frame("_id" = "1fgthhy2334", text = "abc", nums = c(1,2,3))
data <- aggregate(nums ~ X_id + text, data, list)
names(data)[1] <- "_id"
现在它被转换为对象
jsonlite::toJSON(data)
# [{"_id":"1fgthhy2334","text":"abc","nums":[1,2,3]}]
所以插入应该可以工作
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()
作为一项完整性检查,请尝试再次插入它,因为_id
已经存在而失败
m$insert(data)
Error: insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.test_id.$_id_ dup key: { : "1fgthhy2334" }