Javascript Mongoose更改架构字段类型
如何更改猫鼬中一个字段的类型 例如:Javascript Mongoose更改架构字段类型,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,如何更改猫鼬中一个字段的类型 例如: var FooSchema = new Schema({ fooDate: { type: String, unique: true, required: true, trim: true } } fooDate是string类型,我想将其更改为Date类型 如果我只是更改它,现有数据会发生什么变化?迁移旧数据的正确方法是什么 谢谢。这取决于如何将日期存储为字符串这是有效日期吗?假设它是有效的ISO格式或类似的格式:
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,mongoose会将其转换为新类型。因此,您不需要迁移自己的日期。当你得到一个模型时,它的fooDate
现在是Date
vsString
之前
但是,您现在面临的主要问题是查询两种格式的数据。因为现在任何新记录都将保存为日期vs字符串
因此,您可以进行类型更改,但这会为您赢得一些时间,您需要迁移数据以减少以后查询过程中的摩擦。迁移单个字段将是一个微不足道的迁移脚本,因此没有什么可怕的
PS。你可以随时测试这个btw。我只是用一个简单的模式和一个保存的记录做了测试,它的
date
为String
,然后我更新了模式并做了一个简单的模型。查找以获得该记录,并验证现在date
是一个实际的日期,并且mongoose的模型没有问题。只要日期字符串的日期格式正确。您可以随时更改数据类型
var FooSchema = new Schema({
fooDate: {
type: Date,
unique: true,
required: true,
trim: true
}
}
现在将根据新的数据类型输入新的文档记录。对于现有的或以前的脚本,这取决于如何存储字符串您应该使用python或nodejs编写脚本,这取决于您自己。首先获取所有记录并生成一个helper函数,该函数获取字符串并将字符串转换为当时的数据,您可以在javascript中使用Date对象作为Date('2014-08-12')
然后更新以前获取的所有记录,通过这种方式可以实现一致性