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

MongoDB如何筛选同一字段Date()值以便转换为ISODate()

问题说明

原有日期字段Schema定义:

startDate: {type: Date, default: Date.now},

集合内该字段存在两类值:

  • 标准BSON日期类型:ISODate("2022-05-31T03:23:32.193-06:30")
  • 异常值:Date(29906992800000)
    需求为筛选所有Date(...)格式的异常值,后续通过Node应用将其转换为标准ISODate格式。

已完成验证

  1. 普通字段查询
    执行命令:
db.<collection>.find({_id:<id>}, {_id:0, <field>:1})

返回结果:

{"startDate": Date("29906992800000") }
  1. 字段类型检测
    执行聚合查询检测字段类型:
db.<collection>.aggregate([
  {$match:{_id:<id>}}, 
  {$project:{_id:0, t:{$type:"<field>"}}}
])

返回结果确认该类异常值的存储类型为字符串:

{"t": "string"}
筛选实现方案

由于异常值为字符串类型,且格式固定为Date(毫秒时间戳数字),直接组合类型判断和正则匹配即可精准筛选,查询语句如下:

db.<collection>.find({
  startDate: {
    $type: "string",
    $regex: /^Date\(\d+\)$/
  }
})

查询包含两层校验逻辑:

  • 校验startDate值类型为字符串,自动过滤所有正常的ISODate类型文档
  • 正则校验字符串完全匹配Date(纯数字)格式,不会误命中其他字符串内容

查询返回的结果集就是所有需要转换的异常文档,可直接拉取到Node应用中做后续转换处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:21:27