gpt4 book ai didi

node.js - 将 Mongoose 架构字段设置为只读

转载 作者:太空宇宙 更新时间:2023-11-03 21:51:41 24 4
gpt4 key购买 nike

我有一个 Mongoose“用户”架构,其中一个字段需要是只读的。 (“帐户”字段可以从外部更新,因此我不希望对用户的更新覆盖更改。)

var UserSchema = new Schema({
firstName: {
type: String,
trim: true,
default: '',
validate: [validateLocalStrategyProperty, 'Please fill in your first name']
},
lastName: {
type: String,
trim: true,
default: '',
validate: [validateLocalStrategyProperty, 'Please fill in your last name']
},
displayName: {
type: String,
trim: true
},
email: {
type: String,
trim: true,
default: '',
validate: [validateLocalStrategyProperty, 'Please fill in your email'],
match: [/.+\@.+\..+/, 'Please fill a valid email address']
},
username: {
type: String,
unique: 'Username already exists',
required: 'Please fill in a username',
trim: true
},
password: {
type: String,
},
accounts: [{
account_hash: {type: String},
account_name: {type: String}
}],

updated: {
type: Date
},
created: {
type: Date,
default: Date.now
}
}

我看到建议将字段设为虚拟的答案,但在保存时,该字段会从 Mongo 中删除。有没有一种简单的方法可以使 Mongoose 模式中的特定字段只读?

最佳答案

使用最新版本的 Mongoose,您可以将“immutable”设置为您想要不可变的字段的属性。您可以在这里阅读更多信息Mongoose immutable .

所以你可以做类似的事情

const schema = new Schema({
name: { type: String, immutable: true },
age: Number
});

const Model = mongoose.model('Test', schema);

await Model.create({ name: 'test' });
const doc = await Model.findOne();

doc.isNew; // false
doc.name = 'new name';
doc.name; // 'test', because `name` is immutable

这样做的缺点是您的用户不会收到错误消息,让他们知道他们正在尝试更新或已更新的字段是只读的

关于node.js - 将 Mongoose 架构字段设置为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52669676/

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