gpt4 book ai didi

node.js - 如果字段设置为 null,则恢复为 mongoose 中的默认值

转载 作者:可可西里 更新时间:2023-11-01 09:57:00 27 4
gpt4 key购买 nike

我在 nodeJS 中使用 mongoose。考虑以下架构:

var PersonSchema = new mongoose.Schema({
"name": {type: String, default: "Human"},
"age": {type: Number, defualt:20}
});
mongoose.model('Person', PersonSchema);

var order = new Order({
name:null
});

这将创建一个名称设置为 null 的新 Person 文档。

{
name:null,
age: 20
}

有没有检查正在创建/更新的属性是否为空,如果为空,则将其设置回默认值。以下声明

var order = new Order();
order.name = null;
order.save(cb);

应该创建一个新的 Person 文档,并将名称设置为默认值。

{
name:"Human",
age: 20
}

如何使用 NodeJs 和 mongoose 实现这一点。

最佳答案

好吧,有几种方法可以解决这个问题:

预保存/预验证 Hook

Mongoose Middleware hooks

Middleware (also called pre and post hooks) are functions which are passed control during execution of asynchronous functions.

PersonSchema.pre('save', function(next) {
if (this.name === null) {
this.name = 'Human';
}

next();
});

枚举

Mongoose ValidationMongoose Enums

Strings have enum, match, maxlength and minlength validators.

var PersonSchema = new mongoose.Schema({
"name": {type: String, default: "Human", enum: ['Human', 'NONE-Human']},
"age": {type: Number, defualt:20}
});

更新1

If I have 20 fields where I want to check whether they are set to null, do I have to repeat this.field = default for all of them?

我猜你必须这样做。

What does NONE-Human in enums do? I could not find documentation for this online.

这只是带有枚举的 ENUM 示例,您可以选择在 ENUM 中指定的值,即“名称”只能具有“人类”或“NONE-Human”的值。

关于node.js - 如果字段设置为 null,则恢复为 mongoose 中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256182/

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