如何在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
。
但是,您现在面临的主要问题是查询两种格式的数据。因为现在任何新记录都将保存为日期而不是字符串。
因此您可以通过类型更改来解决问题,但是虽然这会为您争取一些时间,但您需要迁移数据以减少稍后查询期间的摩擦。迁移单个字段将是一个微不足道的迁移脚本,因此没有什么可怕的。
附言。你可以随时测试这个顺便说一句。我只是做了一个简单的模式和一个保存的记录,其中 date
为 String
然后我更新了模式并做了一个简单的 Model.find
到获取该记录并验证现在 date
是实际日期,并且 mongoose 的模型没有问题。只要日期字符串的日期格式正确。
关于javascript - Mongoose 更改架构字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56591833/