2017-08-08 73 views
0

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 
    } 
] 

答えて

1

MongoDBはCSVデータからNull値をインポートしません。それは"field": nullを照会する"field"またはヌルが欠落しているすべての文書を返しますことを考えるとあまり意味がないので、私はそれを推測している

です。

-ignoreBlanksオプションを指定すると、デフォルトではなくなっていたフィールドの空の文字列("")の値がインポートされなくなります。あなたが欲しいものを得ることができます

、しかし、次の更新を使用して後処理インポートした文書によって:

collection.update({'field_2': {$exists: false}}, {$set: {'field_2': null}}) 
+0

「MongoDBはあなたのためにNULL値をインポートすることはありません。」しかし、これは真実ではありません。 mongoimportを使用してcsvまたはtsvではなくjsonをインポートすると、間違いなくnullがインポートされます。 – ScottMcG

+0

素敵なキャッチ、私は少し私の答えを言い換えました。それでいい? – dnickless

+0

もっといいですが、私はそれが私が聞きたい答えだったらいいと思っています:)。私が躊躇する部分は、 - ignoreblanksのドキュメントには「 が指定されていない場合、mongoimportはインポートされた 文書に値のないフィールドを作成します。おそらく、これは私のRDBの背景を示していますが、ヌルでなければ "価値のないフィールド"は何ですか?フィールドをまったく作成しないと仮定した場合、なぜこの文言を使用しますか? – ScottMcG

関連する問題