Mongodb 使用mongoimport导入CSV文件是否可以导入空值?
我正在尝试使用mongoimport将CSV导入mongodb 3.4,我希望将空列作为字段的空值导入 mongoimport文档给我的印象是,如果没有指定--ignoreBlanks,我将获得我想要的行为 --忽略空白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. 但是,当我尝试在不
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)为缺少的值导入空字符串在一开始似乎没有太多意义。