javascript - Mongoose 更改架构字段类型

标签 javascript node.js mongodb mongoose

如何在Mongoose中改变一个字段的类型?

例如:

var FooSchema = new Schema({
  fooDate: {
    type: String,
    unique: true,
    required: true,
    trim: true
  }
}

fooDate是一个string类型,我想把它改成Date类型?

如果我只是更改它,现有数据会发生什么变化?迁移旧数据的正确方法是什么?

谢谢。

最佳答案

好吧,这取决于您如何将日期存储为字符串。 这是一个有效的日期吗?让我们假设它是有效的 ISO 格式或类似这样的格式:

"2019-03-20"  or "2019-03-20T09:15:37.220Z"

如果您只是将 String 更改为 Date mongoose 会为您转换它并将其视为新类型。所以你不需要迁移你的约会对象。当你得到一个模型时,它的 fooDate 现在将是 Date 而不是之前的 String

但是,您现在面临的主要问题是查询两种格式的数据。因为现在任何新记录都将保存为日期而不是字符串。

因此您可以通过类型更改来解决问题,但是虽然这会为您争取一些时间,但您需要迁移数据以减少稍后查询期间的摩擦。迁移单个字段将是一个微不足道的迁移脚本,因此没有什么可怕的。

附言。你可以随时测试这个顺便说一句。我只是做了一个简单的模式和一个保存的记录,其中 dateString 然后我更新了模式并做了一个简单的 Model.find 到获取该记录并验证现在 date 是实际日期,并且 mongoose 的模型没有问题。只要日期字符串的日期格式正确。

关于javascript - Mongoose 更改架构字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56591833/

相关文章:

javascript - 如何检查 HTML 元素是否隐藏?

javascript - Node JavaScript express JavaScript 格式数据从 sequelize 查询中获取

MongoDB oplog有键名带点的记录,查询不到,afaict

java - 将 OffsetDateTime 与 Spring Boot 和 MongoDB 一起使用会导致 MappingException

javascript - 我是否误解了继承的概念?

javascript - 等待谷歌服务器端函数解析的最简单方法

javascript - 为什么 this 指的是 window 对象?

javascript - 需要检查对象 javascript 中是否存在两个键中的任何一个

node.js - Twitter 返回未经授权的用户时间线,但不返回搜索

javascript - Mongoose /Mongodb : Index Already Exists With Different Options