2016-07-24 20 views
0

JSONファイルをMongoDBにインポートするためのRuby(v。2.3.0)スクリプトを作成しています(v。3.0.8)。 MongoDBのコレクションの1つにJSONハッシュを挿入する3つの方法を試しましたが、すべての試みにエラーがあります。Mongo :: Error :: OperationFailure、InvalidBulkOperation、BulkWriteError、JSON文書をMongoDBに挿入するとき

1)

コード:

coll = db.collections(my_collection) 
coll.insert_one(json_hash) 

エラー:

$oid is not valid for storage. (52) (Mongo::Error::OperationFailure) 

2)だけではなく、insert_oneの、insert_manyを使用。

コード:

coll = db.collections(my_collection) 
coll.insert_many(json_hash) 

エラー:

Invalid document format for bulk insert_one operation: ["_id", {"$oid"=>"5786e89f536a733ef63c58e0"}]. (Mongo::Error::InvalidBulkOperation) 

3)私は、これら2つのエラーを見てきたように、私はこの問題は、と思いました。そこで、を、JSONファイルのキーが"_id"であるという値から削除しました。

コード:

Mongo::Error::BulkWriteError (Mongo::Error::BulkWriteError) 

がどのように私はこれらのエラーを渡すことができます。

new_hash = {} 
    object.each do |obj| 
    obj.each do |key, value| 
     if key == "_id" 
     value = value["$oid"] 
     end 
    new_hash.store(key, value.to_s) 
    end 
end 

はしかし、["_id", "5786e89f536a733ef63c58e0"]を挿入しようとした後、私は

エラーを得ましたか。

ありがとうございます。

答えて

0

この行によってエラーが発生しました。

coll.insert_many(json_hash) 

json_hashをデータベースに直接挿入できませんでした。指定された形式で書かれている必要があります:Mongo::Collection#insert_one

最後に、私はそれが完全に働いた

object.each do |row| 
    coll.insert_one({name: row[0], lat: row[1], lng: row[2], length: row[3]}) 
end 

コードなどを、変更しました。

+0

insert_manyは配列を受け取るため、エラーが発生します – Machinerium

関連する問題