MongoDB 错误:通过 JSON 文件以 ISO 格式将日期插入 MongoDB

Posted

技术标签:

【中文标题】MongoDB 错误:通过 JSON 文件以 ISO 格式将日期插入 MongoDB【英文标题】:MongoDB error: Insert date into MongoDB in ISO format through JSON file 【发布时间】:2022-01-17 01:18:22 【问题描述】:

我尝试通过 JSON 文件将日期字段加载到 MongoDB,但由于写入错误而出现错误:

BulkWriteErrorindex=0,code-52,message='doller($)前缀字段 'ExpirationDate.$date' 中的 '$date' 对存储无效。'

尝试了以下方法,都没有奏效:

"ExpirartionDate":
  "$date":"2020-07-07"


"ExpirartionDate":ISODate("2020-0-07")

"ExpirartionDate":ISODate("2020-0-07")

请告知正确的格式以通过 JSON 文件将日期作为 ISO 日期插入 MongoDB。

【问题讨论】:

月和日必须分别为 2 位数字:ExpirartionDate: ISODate("2020-07-07") 【参考方案1】:

来自官方documentation:

对于 1970 年到 9999 年之间的日期,包括:

"$date": "$numberLong": "<millis>"

"$date": "<ISO-8601 Date/Time Format>"

对于 1970 年之前或 9999 年之后的日期:

"$date": "$numberLong": "<millis>"

其中值如下:

"<millis>"
   - A 64-bit signed integer as string. The value represents milliseconds relative to the epoch.

"<ISO-8601 Date/Time Format>"
   - A date in [ISO-8601 Internet Date/Time Format](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) as string.

   - The date/time has a maximum time precision of milliseconds:
      - Fractional seconds have exactly 3 decimal places if the fractional part is non-zero.
      - Otherwise, fractional seconds SHOULD be omitted if zero.

ISO 8601 日期的“时间”部分是可选的。 所以你的第一次尝试会成功,我刚刚确认了这一点。

您的 json 应该如下所示:

[
  
    "ExpirationDate":  "$date": "2020-07-07" 
  
]

【讨论】:

我可以手动将文档插入到 Mongo 中,但是当我尝试使用 Kafka 数据馈送加载时,他们面临上述“$date”问题 我试过没有 $ 符号的日期,它被存储为字符串。我只想以日期格式保存日期,我已经尝试过 $date 和 ISODate ,两者都不起作用。有没有其他方法可以发送提交的日期? 您的问题似乎不在于格式和导入,而在于您的管道?你是如何准确导入 json 的? 我会发送 json 文档到 Kafka 主题,kafka 会将 json 加载到 MongoDB mongodb.com/blog/post/… 根据上面的链接,我们似乎无法在 json 文档中做任何事情,我必须在 kafka 中定义输出模式,以便在加载到 Mongodb 之前将日期归档为日期,我该如何定义输出模式?我的理解对吗?

以上是关于MongoDB 错误:通过 JSON 文件以 ISO 格式将日期插入 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

Failed: error processing document #281: unexpected EOF,往MongoDB当中插入json文件时出现的错误。

尝试将 json 导入 mongodb 云集合时出现语法错误

[MongoDB]虽然查询不包含$literal,但错误信息显示$literal is not supported

What is MongoDB and For What?

使用spring boot MongoTemplate删除mongodb记录会抛出错误:“Second is Null”