2013-03-11 22 views
5

私はmongoimportを使用してCSVファイルからのMongoDBののObjectIdをインポートするために苦労しています:私はすべての組み合わせを試してみましたが、私は考えることができ方法を逃れるが、CSVから正しくObjectIdがインポートすることはできませんmongoimportを使用してCSVファイルからMongodb ObjectIdをインポートするには?

まず、私がMongoDBからCSVにエクスポートしたものを正確にインポートしようとしました。 MongoDB 2.2.1を使用しています。

私はちょうど2つのコレクションを作成し、別の文書に一つの文書の_idを参照:

use yourdb 
db.createCollection("student") 
db.createCollection("class") 
db.student.insert({"name":"Peter"}) 
db.student.find() returns { "_id" : ObjectId("5143af326d44e1ceb372121d"), "name" : "Peter" } 
db.class.insert({"student_id": ObjectId("5143af326d44e1ceb372121d"),"name":"II-4"}) 

その後、私はシェルでmongoexportコマンドを使用:

CSVを結果として生じる
mongoexport -h localhost:3002 -d yourdb -c classes --csv -f student_id,name > export.txt 

は次のようになります。

student_id,name 
ObjectID(5143af326d44e1ceb372121d),"II-4" 

次に、結果のCSVをインポートしました。

mongoimport -h localhost:3002 -d yourdb -c class --type csv --file export.txt --headerline 

キシにクラスのコレクションは現在、返します。

db.class.find() 
{ "_id" : ObjectId("5143afc66d44e1ceb372121e"), "student_id" : ObjectId("5143af326d44e1ceb372121d"), "name" : "II-4" } 
{ "_id" : ObjectId("5143b44788df173ba096550e"), "student_id" : "ObjectID(5143af326d44e1ceb372121d)", "name" : "II-4" } 

あなたは2番目の文書でSTUDENT_IDフィールドに気づくことができたように、実際に文字列ではなくMongoDBのObjectIdがあります。

私は何かに間違っているか、またはMongoが輸出したCSVをインポートできませんか?

+0

何が起こると思われ、代わりに何が起こっていますか?あなたはあなたの例で同じコレクションにインポートしているので、それは不明瞭です。 – JohnnyHK

+0

私はcsvからMongoDBのObjectIDをインポートしようとしていますが、MongoDBにインポートされた文字列だけを取得しています。私はMongoDBのcsvエクスポートをインポートしようとしましたが、ObjectIDsにはなりませんでした。誰もmongoimportを使ってCSVファイルからObjectIDフィールドをインポートしようとしたようですね。 – vladimirp

+0

これを試してみるとうまくいきました。あなたの実際のtest.csvファイルには、フィールド名を含むヘッダー行がありますか?あなたの例のCSVはそれを表示しません。 – JohnnyHK

答えて

3

問題はMongoDB 2.4.1で再現できます。

ドキュメント(http://docs.mongodb.org/manual/reference/mongoimport/)の状態(私が強調):彼らは確実にデータ型 情報をキャプチャしませんので、

注意、完全なインスタンスの 生産のバックアップをmongoimportとmongoexportを使用しないでください。この種の機能については、「Backup MongoDBシステムの戦略」の説明に従って、mongodumpとmongorestoreを使用してください。 https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/RcnumM5QyxM同様の質問は、このよう答えた。この議論では

:TSVまたはCSVと

Mongoimportできのみインポート文字列や数値、および ない[1で指定された他のタイプのいずれか]。これらのタイプを にインポートしたい場合は、 インポートファイルのTSVではなくJSONを生成できれば、それは良い方法です。そうでない場合は の後処理ステップを記述して、文字列を適切な MongoDBタイプに変換することができます( 指定フィールドの値のタイプについての知識に基づいています)。

  • ダン

[1] http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON

+1

それは最終的には私がそれと思った方法では不可能です。説明Ronastaありがとう。 – vladimirp

+0

タイプを保持するために、CSVファイルを互換性のあるJSONに変換する方法についての説明:http://stackoverflow.com/a/21298840/943833 – Roganartu

16

JSONからたObjectIdを挿入しようとしているこの問題を持つ人のために - それは非常に多くの既存のデータへの変更のビットで可能です。

は交換してください:付き

{ "_id" : ObjectId("5143afc66d44e1ceb372121e"), 
    "student_id" : ObjectId("5143af326d44e1ceb372121d"), 
    "name" : "II-4" } 

{ "_id" : {"$oid":"5143afc66d44e1ceb372121e"}, 
    "student_id" : {"$oid":"5143af326d44e1ceb372121d"}, 
    "name" : "II-4" } 

をするだけのObjectIdラップを置き換えるために、正規表現を使用します。

+2

ベストアンサー!緑色でなければならない! – bora89

関連する問題