如何用Python将含日期字符串的JSON转为MongoDB的ISODate对象
将JSON日期字符串转换为MongoDB ISODate对象的几种方法
方法1:使用MongoDB扩展JSON格式(推荐)
MongoDB支持扩展JSON规范,直接修改原JSON的日期字段为{"$date": "日期字符串"}格式,就能被mongoimport识别为ISODate:
修改后的JSON:
[{"_id": "123", "lastSyncedAt": {"$date": "2021-03-10T15:46:51Z"}}]
(建议给日期加上Z表示UTC时区,避免时区歧义)
然后用mongoimport命令导入:
mongoimport --db your_db --collection your_coll --jsonArray --file modified.json
方法2:先导入字符串,再批量转换
如果已经把原JSON导入MongoDB(此时lastSyncedAt是字符串类型),可以用MongoDB Shell的聚合更新语法批量转成ISODate:
打开MongoDB Shell,执行:
db.your_coll.updateMany( {}, // 匹配所有文档 [ { $set: { lastSyncedAt: { $toDate: "$lastSyncedAt" } } } ] )
这个方法不用修改原JSON文件,适合已完成导入的场景。
方法3:预处理JSON生成MongoDB Shell脚本
如果需要直接生成带ISODate()的脚本文件,可以用文本替换工具(比如Linux/macOS的sed)批量修改:
执行命令:
sed -E 's/"lastSyncedAt": "([^"]+)"/"lastSyncedAt": ISODate("\1")/' input.json > output.js
生成的output.js内容就是你期望的格式:
[{"_id": "123", "lastSyncedAt": ISODate("2021-03-10T15:46:51")}]
然后在MongoDB Shell中执行这个脚本:
mongo your_db < output.js
(注意:这种生成的不是标准JSON,只能通过MongoDB Shell执行,不能用mongoimport导入)
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

