如果尝试设置_id

时间:2017-01-31 13:50:26

标签: r mongodb

我可以将数据插入来自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字段设置为我选择的(唯一)标识符?

1 个答案:

答案 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" }