【问题标题】:Mongoose set default on field update if field is not present or null如果字段不存在或为空,猫鼬在字段更新时设置默认值
【发布时间】:2020-08-26 14:53:30
【问题描述】:

假设我有一个像这样的猫鼬模式:-

var mSchema = new Schema({
  name: { type: String, required: true}
});

并且已经使用这个模式一年了,现在我想像这样添加性别:-

var mSchema = new Schema({
  name: { type: String, required: true},
  gender: { type: String, default: 'Male' } 
});

每当有更新请求时,我希望此性别自动将男性设置为默认值,但我发现默认值不会在更新请求中设置。 (注意:这只是一个例子,不是现实生活中的场景。如果字段不存在或为空,我只想要猫鼬默认工作)

有什么方法可以在更新文档时设置默认值?

【问题讨论】:

  • 一个可能的解决方案是,每当您添加具有默认值的新字段时,运行 updateMany 查询以使用默认值初始化该字段。

标签: mongodb mongoose updates mongoose-schema auto-update


【解决方案1】:

如果您使用的是update() 之类的功能,那么正如this 回答所述,这是不可能的。不过,您可以简单地切换到findOne() 之类的函数并使用save(),它应该可以做到这一点。

在插入文档时,您还可以查看setDefaultsOnInsert 选项:https://mongoosejs.com/docs/defaults.html#the-setdefaultsoninsert-option

const options = {
  // Create a document if one isn't found. Required
  // for `setDefaultsOnInsert`
  upsert: true,
  setDefaultsOnInsert: true
};

await XY.findOneAndUpdate(query, update, options);

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2021-12-19
    • 2018-08-26
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2020-03-02
    • 2020-07-29
    相关资源
    最近更新 更多