2016-07-24 69 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