我在一个对象上调用 user.save(),在那里我设置了 user.signup_date = null;
user.first_name = null;
user.signup_date = null;
user.save();
但是当我在 mongodb 中查看用户时,它仍然设置了 signup_date 和 first_name ......我如何有效地将这个字段设置为空或 null?
要从现有文档中删除这些属性,请将它们设置为,undefined
而不是null
在保存文档之前:
user.first_name = undefined;
user.signup_date = undefined;
user.save();
确认仍在 Mongoose 5.9.7 中工作。请注意,您尝试删除的字段仍必须在您的架构中定义才能正常工作。
如果您尝试使用 set 方法是否会有所不同,如下所示:
user.set('first_name', null);
user.set('signup_date', null);
user.save();
或者保存时可能出现错误,如果您这样做会发生什么:
user.save(function (err) {
if (err) console.log(err);
});
它会在日志中打印任何内容吗?
另一种选择是undefined
为这些属性定义一个默认值。
类似于以下内容:
let userSchema = new mongoose.Schema({
first_name: {
type: String,
default: undefined
},
signup_date: {
type: Date,
default: undefined
}
})
只需删除字段
delete user.first_name;
delete user.signup_date;
user.save();
在Mongoose 文档(Schema Types)上,你可以去Arrays
解释。在那里,它说:
数组很特殊,因为它们隐含的默认值为
[]
(空数组)。
var ToyBox = mongoose.model('ToyBox', ToyBoxSchema);
console.log((new ToyBox()).toys); // []
要覆盖此默认值,您需要将
default
值设置为undefined
(我在toys
元素内添加了一个)
var ToyBoxSchema = new Schema({
toys: {
type: [{
name: String,
features: [String]
}],
default: undefined
}
});