gpt4 book ai didi

javascript - 如何使 Mongoose 不将空数组或对象字段插入文档中

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:50 27 4
gpt4 key购买 nike

假设我们的 Node.js 项目中有一个 Mongoose 架构:

let coolSchema = new mongoose.Schema({
field_1 : Number,
field_2 : String,
field_3 : [ String ],
});

让我们有一个相应的对象:

var data = {
field_1 : 123,
field_2 : 'blah',
field_3 : ['aa', 'bb'],
};

现在要将这些数据保存到 MongoDB 中,我们可以使用以下代码:

let Model = require('mongoose').model('CoolModel', coolSchema);
(new Model(data)).save();

好吧,虽然一切都很酷。

但是,如果data不包含field_3(数组字段,对于对象字段也是如此)Mongoose无论如何都会将此字段添加到正在创建的文档中,并具有空值。

如果data对象中不包含该字段,我们能否以某种方式告诉Mongoose不要创建该字段?

最佳答案

您可以轻松地跳过数组字段和对象字段数组。这将让您跳过在新文档中保存空数组。但您必须为此使用 pre hook 。

var brandSchema = new Schema({
name : {type:String},
email:String,
check:[]
})

brandSchema.pre('save', function (next) {
if (this.isNew && 0 === this.check.length) {
this.check = undefined;
}
next();
})

当新文档插入到您的模式中时,您必须使用这个 middlware。这工作正常,所以试试这个。这是当我们想要插入任何文档时的响应

"data": {
"__v": 0,
"name": "testing",
"email": "testing@gmail.com",
"_id": "5915b018e292833edda8837f"
}

所以我只发送电子邮件和姓名,但跳过检查(数组)字段(不发送任何值)。

关于javascript - 如何使 Mongoose 不将空数组或对象字段插入文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43934652/

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