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
vs
String
之前

但是,您现在面临的主要问题是查询两种格式的数据。因为现在任何新记录都将保存为日期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')

然后更新以前获取的所有记录,通过这种方式可以实现一致性