2016-07-24 4 views
0

Ich schreibe ein Ruby (v. 2.3.0) -Skript, um JSON-Datei in MongoDB (v. 3.0.8) zu importieren. Ich habe versucht, drei Möglichkeiten, JSON-Hash in eine der Sammlungen in MongoDB einzufügen, aber alle Versuche haben Fehler.Mongo :: Fehler :: OperationFailure, InvalidBulkOperation, BulkWriteError, beim Einfügen von JSON-Dokument in MongoDB

1)

Code:

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

Fehler:

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

2) Nur insert_many verwendet, statt insert_one.

Code:

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

Fehler:

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

3) Als ich diese beiden Fehler gesehen habe, dachte ich, das Problem mit war. So entfernte ich von dem Wert, der der Schlüssel "_id" in der JSON-Datei ist.

Code:

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 

jedoch nach dem Versuch ["_id", "5786e89f536a733ef63c58e0"] einzufügen, ich habe

Fehler:

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

Wie könnte ich diese Fehler passieren?

Vielen Dank im Voraus.

Antwort

0

Der Fehler wurde durch diese Zeile verursacht.

json_hash konnte nicht direkt in die Datenbank eingefügt werden. Es sollte in dem angegebenen Format geschrieben werden: Mongo::Collection#insert_one.

Schließlich änderte ich den Code wie,

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

Es funktionierte perfekt.

+0

insert_many erhalten ein Array, so erhalten Sie einen Fehler – Machinerium

Verwandte Themen