You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mongo Go Driver解析BSON扩展JSON日期失败原因?

问题原因及解决办法

报错的核心原因是你调用bson.UnmarshalExtJSON时第二个参数传了true,这个参数代表启用规范模式的扩展JSON解析规则,但你提供的是宽松模式的$date格式。

两种模式对$date的要求不同:

  • 规范模式下,$date的值必须是包含$numberLong(毫秒级时间戳)的嵌套对象,格式类似:{"$date": {"$numberLong": "1704067200000"}}
  • 宽松模式才允许$date直接使用ISO 8601格式的字符串。

解决方式1:切换为宽松模式解析

修改代码中的第二个参数为false,适配你当前的JSON格式:

var v bson.M
bsonString := `{"createdAt": {"$date": "2024-01-01T00:00:00.000Z"}}`
err := bson.UnmarshalExtJSON([]byte(bsonString), false, &v)
if err != nil {
    t.Fatalf("cannot unmarshal: %v", err)
}

解决方式2:改用规范模式的JSON格式

保持解析参数为true,同时调整JSON字符串为规范模式的格式:

var v bson.M
bsonString := `{"createdAt": {"$date": {"$numberLong": "1704067200000"}}}`
err := bson.UnmarshalExtJSON([]byte(bsonString), true, &v)
if err != nil {
    t.Fatalf("cannot unmarshal: %v", err)
}

内容的提问来源于stack exchange,提问作者AleG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:02:33