猫鼬更改架构字段类型

时间:2019-06-14 05:23:01

标签: javascript node.js mongodb mongoose

如何更改猫鼬中一个字段的类型?

例如:

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

fooDatestring类型,我想将其更改为Date类型吗?

如果仅更改它,现有数据将如何处理?迁移旧数据的正确方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

好吧,这取决于您如何将日期存储为字符串。 有效日期吗?假设它采用有效的ISO格式或类似的格式:

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

如果仅将String更改为Date,猫鼬会为您转换它,并将其视为新类型。因此,您本身就不需要迁移日期。当您获得模型时,其fooDate现在将是DateString之前。

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

因此,您可以通过类型更改来解决问题,但这会为您带来一些时间,因此您需要迁移数据以减少以后查询时的麻烦。迁移单个字段将是一个琐碎的迁移脚本,因此那里没有什么令人恐惧的地方。

PS 。您可以随时测试此操作。我只是使用一个简单的架构和一个保存的记录(其dateString)进行了操作,然后更新了该架构并做了一个简单的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')

然后,您可以更新以此方式获取的所有先前记录,从而保持一致性

相关问题