如何更改猫鼬中一个字段的类型?
例如:
var FooSchema = new Schema({
fooDate: {
type: String,
unique: true,
required: true,
trim: true
}
}
fooDate
是string
类型,我想将其更改为Date
类型吗?
如果仅更改它,现有数据将如何处理?迁移旧数据的正确方法是什么?
谢谢。
答案 0 :(得分:1)
好吧,这取决于您如何将日期存储为字符串。 有效日期吗?假设它采用有效的ISO格式或类似的格式:
"2019-03-20" or "2019-03-20T09:15:37.220Z"
如果仅将String
更改为Date
,猫鼬会为您转换它,并将其视为新类型。因此,您本身就不需要迁移日期。当您获得模型时,其fooDate
现在将是Date
与String
之前。
但是现在您面临的主要问题是查询两种格式的数据。因为现在任何新记录都将另存为日期或字符串。
因此,您可以通过类型更改来解决问题,但这会为您带来一些时间,因此您需要迁移数据以减少以后查询时的麻烦。迁移单个字段将是一个琐碎的迁移脚本,因此那里没有什么令人恐惧的地方。
PS 。您可以随时测试此操作。我只是使用一个简单的架构和一个保存的记录(其date
为String
)进行了操作,然后更新了该架构并做了一个简单的Model.find
以获取该记录并验证了{{1 }}是实际日期,猫鼬的模型没有问题。只要日期字符串的日期格式正确即可。
答案 1 :(得分:1)
您可以随时更改数据类型。例如
var FooSchema = new Schema({
fooDate: {
type: Date,
unique: true,
required: true,
trim: true
}
}
现在将根据新的数据类型输入新的文档记录。对于现有或上一个取决于您存储字符串的方式,您应该在python或nodejs中制作一个脚本,这取决于您。首先获取所有记录,并创建一个辅助函数,将字符串转换为当时的数据,您可以使用Date Object作为Date('2014-08-12')
然后,您可以更新以此方式获取的所有先前记录,从而保持一致性