使用mongoose将字段设置为空的mongo对象

时间:2012-09-28 09:08:00

标签: node.js mongodb mongoose

我在一个对象上调用user.save(),我在其中设置了user.signup_date = null;

user.first_name = null;
user.signup_date = null;

user.save();

但是当我在mongodb中查看用户时,它仍然有signup_date和first_name设置...如何有效地将此字段设置为空或null?

5 个答案:

答案 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
     }
});