2016-07-24 66 views
0

我正在寫一個ruby(v.2.3.0)腳本來將JSON文件導入MongoDB(v。3.0.8)。我嘗試了三種方法將JSON哈希插入到MongoDB的其中一個集合中,但所有嘗試都出錯。當將JSON文檔插入到MongoDB中時,Mongo :: Error :: OperationFailure,InvalidBulkOperation,BulkWriteError

1)

代碼:

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

錯誤:

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

2)剛使用insert_many,代替insert_one

代碼:

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)正如我所看到的這兩個錯誤,我認爲這個問題是與。因此,我從JSON文件中的密鑰值"_id"中刪除了。

代碼:

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"]後,我得到了

錯誤:

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

我怎麼可能通過這些錯誤?

預先感謝您。

回答

0

錯誤是由此行引起的。

coll.insert_many(json_hash) 

json_hash無法直接插入數據庫。它應該是在給定的格式wrriten: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