mongoimportを使用してCSVからmongodb 3.4にインポートしようとしています。空の列をフィールドのNULL値としてインポートすることをお勧めします。mongoimportを使用してCSVファイルをインポートすると、NULLをインポートできますか?
私はmongoimportのドキュメントから、--ignoreBlanksが指定されていないと、私が望む動作を得ることができたという印象を受けました。しかし
--ignoreBlanks
Ignores empty fields in csv and tsv exports. If not specified, mongoimport creates fields without values in imported documents.
、私は--ignoreblanksせずにこのサンプル・データをロードしよう:
field_1.string(),field_2.int32(),field_3.string()
A,5,B
C,,D
E,7,F
が、私はある任意のフィールド上のエラーを取得します文字列ではありません。
mongoimport --collection null_test --type csv --headerline --columnsHaveTypes --file null_test.csv --verbose
2017-08-08T16:55:42.989+0000 filesize: 67 bytes
2017-08-08T16:55:42.989+0000 using fields: field_1,field_2,field_3
2017-08-08T16:55:43.001+0000 connected to: localhost:27017
2017-08-08T16:55:43.001+0000 ns: DEV.null_test
2017-08-08T16:55:43.001+0000 connected to node type: standalone
2017-08-08T16:55:43.001+0000 using write concern: w='1', j=false, fsync=false, wtimeout=0
2017-08-08T16:55:43.001+0000 using write concern: w='1', j=false, fsync=false, wtimeout=0
2017-08-08T16:55:43.001+0000 Failed: type coercion failure in document #1 for column 'field_2', could not parse token '' to type int32
2017-08-08T16:55:43.001+0000 imported 0 documents
文字列のフィールドの場合、nullではなく空の文字列が読み込まれます。
私はここで間違っていますか? mongoimportをCSVまたはTSVファイルで使用してNULLとしてフィールドをロードすることは可能ですか?
mongoimportを使用してNULLを持つjsonファイルをインポートすると、それは実際のNULLとして正しくインポートされます。
[
{
"field1": "A",
"field2": null,
"field3": "C"
},
{
"field1": 1,
"field2": 5,
"field3": null
}
]
「MongoDBはあなたのためにNULL値をインポートすることはありません。」しかし、これは真実ではありません。 mongoimportを使用してcsvまたはtsvではなくjsonをインポートすると、間違いなくnullがインポートされます。 – ScottMcG
素敵なキャッチ、私は少し私の答えを言い換えました。それでいい? – dnickless
もっといいですが、私はそれが私が聞きたい答えだったらいいと思っています:)。私が躊躇する部分は、 - ignoreblanksのドキュメントには「 が指定されていない場合、mongoimportはインポートされた 文書に値のないフィールドを作成します。おそらく、これは私のRDBの背景を示していますが、ヌルでなければ "価値のないフィールド"は何ですか?フィールドをまったく作成しないと仮定した場合、なぜこの文言を使用しますか? – ScottMcG