假设我们的 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/