Mongodb 使用mongoimport导入CSV文件是否可以导入空值?

Mongodb 使用mongoimport导入CSV文件是否可以导入空值?,mongodb,csv,mongoimport,Mongodb,Csv,Mongoimport,我正在尝试使用mongoimport将CSV导入mongodb 3.4,我希望将空列作为字段的空值导入 mongoimport文档给我的印象是,如果没有指定--ignoreBlanks,我将获得我想要的行为 --忽略空白 Ignores empty fields in csv and tsv exports. If not specified, mongoimport creates fields without values in imported documents. 但是,当我尝试在不

我正在尝试使用mongoimport将CSV导入mongodb 3.4,我希望将空列作为字段的空值导入

mongoimport文档给我的印象是,如果没有指定--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
对于字符串字段,它将加载空字符串而不是空字符串

我做错了什么?是否可以使用mongoimport和CSV或TSV文件将字段加载为空

值得一提的是,如果我使用mongoimport导入一个带有空值的json文件,它会将它们作为实际的空值导入

[
    {
        "field1": "A",
        "field2": null,
        "field3": "C"
    },
    {
        "field1": 1,
        "field2": 5,
        "field3": null
    }
]

MongoDB永远不会从CSV数据导入空值

我猜这是因为如果查询
“field”:null将返回
“field”
缺少null的所有文档,那么这就没有太大意义了

-ignoreBlanks
选项将简单地阻止导入为缺少的字段创建空字符串(
“”
)值,否则将成为默认值

不过,通过使用以下更新对导入的文档进行后处理,您可以获得所需的内容:

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

“MongoDB永远不会为您导入空值。”但事实并非如此。如果我使用mongoimport来导入json而不是csv或tsv,它肯定会导入空值。好吗?更好,但我希望这是我想听的答案:)。让我犹豫不决的是--ignoreblanks的文档说“如果没有指定,mongoimport会在导入的文档中创建没有值的字段。”也许这就是我的RDB背景,但是如果不是null,“没有值的字段”是什么?如果它根本不应该创建字段,为什么它会使用这种措辞?而且,我将与我的开发人员更详细地讨论在第一位设置空值的必要性。我倾向于同意-进口商应该以某种方式相同地工作。另外,当您使用mongoexport将具有空值的数据导出到文件时,您将获得所描述的结构。因此,当再次阅读时,您希望得到相同的结果。但话说回来。。。怎么用?需要有一些神奇的方法来区分和
null
,这在CSV中并不存在。此外,我同意您提到的标志a)根据其文档指示了一些不同的功能性,b)为缺少的值导入空字符串在一开始似乎没有太多意义。