node.js - 更新模式而不删除 mongodb 中的集合
问题描述
我的架构看起来像:
const UserSchema = Schema({
_id: mongoose.Schema.Types.ObjectId,
userName: {
type: String,
required: true,
},
userPhoneNumber: {
type: String,
},
role:[{
type:mongoose.Schema.Types.ObjectId,
ref:Role
}]
});
使用此架构,我在数据库中添加了带有role:[]
. 但现在根据要求,我需要在不删除现有集合的情况下更新架构。我需要更新数据,所有字段都相同,除了角色。我想用角色更新现有记录
role:[{
department:{
type:string
},
roleNames:[{
type:type: mongoose.Schema.Types.ObjectId,
ref:Role
}]
}]
那么如何在不删除集合的情况下更新架构。
解决方案
MongoDB 的诞生就是为了解决这种类型的模式问题,您只需添加另一个具有默认值的字段,就像这样
旧架构:
new Schema({
name: { type: string }
})
带有出生地字段的新架构:
new Schema({
name: { type: string },
birthplace: { type: string, required: true, default: 'neverborn' }
});
推荐阅读
- java - 无法从 jboss 调用 api.backblaze.com
- flutter - 如何处理小部件测试中的设备宽度和方向?
- c# - ASP.NET Core Jwt 401 未经授权。策略认证
- javascript - chrome上的getDisplayMedia拆分选择窗口
- rust - Rust 链表不能借用上一个和下一个元素作为可变的(只需要不可变的引用)
- java - 引起:java.sql.SQLException:ORA-06550:第 1 行,第 7 列:PLS-00306:调用“PR_SP_FAHMI”时参数的数量或类型错误
- javascript - window.moveTo() 在 Firefox 中不会超过我屏幕的一半
- python-3.x - Python 3 中有异步抽象基类吗?
- ios - 如何在 StackView 中停止排列的子视图剪辑
- xamarin - 如何导航离开 MasterDetailPage 但不重置导航堆栈