_id

2017-01-31 10 views
1

を設定しようとする場合、私はRからmongolabsでホストされているmongodbにデータを挿入することができますRを経由してのMongoDBにデータを挿入中にエラーが、私は、私はこのエラーを取得する_idフィールドを設定してみた瞬間:任意_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フィールドを選択した(一意の)識別子に設定するにはどうすればよいですか?

答えて

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" } 
が存在するので、それが失敗します
関連する問題