gpt4 book ai didi

javascript - 迁移需要更改 meteor 集合架构内的属性类型吗?

转载 作者:行者123 更新时间:2023-12-01 00:40:29 25 4
gpt4 key购买 nike

我有一个像这样的 Meteor Collection 的 Simpleschema:

Users.attachSchema(new SimpleSchema({: {
...
age: {
type: String,
optional: true
},
...
}));

现在我想将年龄的类型更改为类型:数字

问题1:我必须运行迁移吗?
Q2:如果是这样,迁移会是什么样子?

最佳答案

通常这些类型的问题非常广泛,但我只是想给你一些关于如何思考这个问题的想法:

问题1:我必须运行迁移吗?

如果您有依赖于或使用age(甚至隐式)的外部模型、 Controller 或 View ,并期望它是一个数字,那么您需要迁移。

问题2:如果是这样,迁移会是什么样子?

这里有很多选项。

例如,您可以进行快速迁移,只需更改架构以使用Number,并更新任何使用年龄将其作为数字处理的代码。为了确保兼容性,您需要编写一个补丁,将所有现有文档的 age 更新为 StringNumber

您还可以进行更慢的迁移,并通过扩展架构来保持模型向后兼容:

Users.attachSchema(new SimpleSchema({: {
...
age: {
type: String,
optional: true
},
ageNum: {
type: Number,
optional: true
}
...
}));

然后你编写一个助手,它总是以新格式返回年龄,并回退到旧结构:

const getAge = userDoc => {
if (!userDoc) return

// compatibility to schema v.2
if (typeof user.ageNum === 'number') {
return user.ageNum
}

// fallback compatibility to schema v.1
if (typeof user.age === 'string') {
return parseInt(user.age, 10)
}

// else do nothing, which returns undefined
// when age and ageNum are not set
}

然后重写其他代码以仅使用 getAge 来检索年龄。请注意,您还需要更新插入/更新用户文档的方法,因此它们使用 ageNum 而不是 age

使用此方法,默认情况下所有新用户都将具有基于数字的年龄,而尚未更新的旧文档仍受支持。这避免了为了完整性而修补所有文档的需要。

这里还有很多其他选项,很难给出更准确的答案。

关于javascript - 迁移需要更改 meteor 集合架构内的属性类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57758029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com