我在一个对象上调用user.save(),我在其中设置了user.signup_date = null;
user.first_name = null;
user.signup_date = null;
user.save();
但是当我在mongodb中查看用户时,它仍然有signup_date和first_name设置...如何有效地将此字段设置为空或null?
答案 0 :(得分:38)
要从现有文档中删除这些属性,请在保存文档之前将其设置为undefined
而不是null
:
user.first_name = undefined;
user.signup_date = undefined;
user.save();
答案 1 :(得分:3)
如果您尝试使用set方法,它会有所不同,如下所示:
user.set('first_name', null);
user.set('signup_date', null);
user.save();
或者保存时可能会出现错误,如果您这样做会发生什么:
user.save(function (err) {
if (err) console.log(err);
});
是否会在日志中打印任何内容?
答案 2 :(得分:1)
只需删除字段
delete user.first_name;
delete user.signup_date;
user.save();
答案 3 :(得分:1)
另一种选择是为这些属性定义默认值为undefined
。
如下所示:
let userSchema = new mongoose.Schema({
first_name: {
type: String,
default: undefined
},
signup_date: {
type: Date,
default: undefined
}
})
答案 4 :(得分:0)
在Mongoose documentation(架构类型)上,可以转到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
}
});