我尝试使用mongoimport从CSV导入mongodb 3.4,我希望将空列导入为字段的空值。
我受到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
对于字符串字段,它会加载空字符串而不是空字符串。
我在这里做错了什么?是否可以使用带有CSV或TSV文件的mongoimport将字段加载为NULL?
对于它的价值,如果我使用mongoimport导入一个带有NULL的json文件,它会将它们作为实际的NULL进行导入。
[
{
"field1": "A",
"field2": null,
"field3": "C"
},
{
"field1": 1,
"field2": 5,
"field3": null
}
]
答案 0 :(得分:1)
MongoDB永远不会从CSV数据中导入空值。
我猜这是因为查询"field": null
会返回"field"
缺少或 null的所有文档时,它没有多大意义。
-ignoreBlanks
选项只会阻止导入为缺少的字段创建空字符串(""
)值,否则这些字段将成为默认值。
但是,您可以通过使用以下更新对导入的文档进行后处理来获得所需内容:
collection.update({'field_2': {$exists: false}}, {$set: {'field_2': null}})