mongoimport导入CSV至MongoDB时如何指定日期格式解决解析报错
核心报错原因与正确配置方法
当前配置存在两个直接导致报错的问题:
field_file_types.txt中date()的传参错误:--columnsHaveTypes模式下,date类型括号内需要传入Go语言风格的日期格式模板,而非日期样例。Go的日期模板固定以参考时间2006-01-02 15:04:05为基准(对应年-月-日 24小时制:分:秒),占位符不能用Java风格的yyyy/MM/dd写法。- 执行的
mongoimport命令末尾多了一个无匹配的双引号,属于语法错误。
针对CSV中2022-06-19 09:06:30.49657这种yyyy-MM-dd HH:mm:ss.SSSSS格式的日期,修正后的配置如下:
field_file_types.txt
id.auto() created_timestamp.date(2006-01-02 15:04:05.00000)
如果实际日期是斜杠分隔的yyyy/MM/dd HH:mm:ss.SSSSS格式,把第二行改成created_timestamp.date(2006/01/02 15:04:05.00000)即可。
修正后的导入命令
mongoimport --type csv --file ./latest.csv --columnsHaveTypes --fieldFile=./field_file_types.txt
MongoDB 默认自动识别的日期格式
不手动指定日期模板时,mongoimport仅能自动解析三类格式的日期值:
- 符合RFC3339规范的时间字符串,例如
2022-06-19T09:06:30Z、2022-06-19T09:06:30+08:00 - 不带毫秒/微秒的标准ISODate字符串,格式为
yyyy-MM-dd HH:mm:ss - 纯数字时间戳:10位秒级时间戳、13位毫秒级时间戳
常用日期字段配置示例
以下为fieldFile中常用的日期类型写法,可直接复用:
- 解析带时区的标准ISODate:
created_at.date(2006-01-02T15:04:05.000Z) - 解析13位毫秒时间戳:
created_at.date(ms) - 解析10位秒级时间戳:
created_at.date(epoch) - 解析斜杠分隔的年月日时分秒:
created_at.date(2006/01/02 15:04:05) - 解析仅含年月日的日期:
created_at.date(2006-01-02)
内容的提问来源于stack exchange,提问作者Inspiraller
相关产品推荐
相关产品推荐

