25

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

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

user.save();

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

4

5 回答 5

51

要从现有文档中删除这些属性,请将它们设置为,undefined而不是null在保存文档之前:

user.first_name = undefined;
user.signup_date = undefined;

user.save();

确认仍在 Mongoose 5.9.7 中工作。请注意,您尝试删除的字段仍必须在您的架构中定义才能正常工作。

于 2012-09-28T12:31:59.943 回答
4

如果您尝试使用 set 方法是否会有所不同,如下所示:

user.set('first_name', null);
user.set('signup_date', null);
user.save();

或者保存时可能出现错误,如果您这样做会发生什么:

user.save(function (err) {
    if (err) console.log(err);
});

它会在日志中打印任何内容吗?

于 2012-09-28T09:33:08.750 回答
4

另一种选择是undefined为这些属性定义一个默认值。

类似于以下内容:

let userSchema = new mongoose.Schema({ first_name: { type: String, default: undefined }, signup_date: { type: Date, default: undefined } })

于 2018-03-21T15:35:54.027 回答
1

只需删除字段

delete user.first_name;
delete user.signup_date;
user.save();
于 2012-09-28T15:20:36.427 回答
1

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
     }
});
于 2019-03-14T10:47:59.180 回答