Mongoose默认值是否适用于现有文档?

时间:2016-01-28 16:09:02

标签: node.js mongodb mongoose mongoose-schema

如果我向Mongoose架构添加属性并为其指定默认值,那么现有文档在加载时是否会收到这些默认值?

2 个答案:

答案 0 :(得分:6)

是的,但如果查询是lean,则不会。

对于返回完整Mongoose文档对象的查询 - Thing.find({...}) - 只要缺少该属性,就会返​​回默认值,无论架构何时更改。如果随后保存文档,则将在数据库中实现默认值。

如果查询是lean - Thing.find({...}).lean() - 查询只返回数据库中的内容,而且不包含任何新添加的默认值(除非文档已加载)并保存,如上所述。)

答案 1 :(得分:0)

您可以自定义default以忽略文档已存在的情况。

而不是执行default: Date.now,获取的现有文档将显示当前日期,即使它未在数据库中设置,也可以执行此操作:

default: function() {
  if (this.isNew) {
    return Date.now();
  }
  return void 0;
}

现在,在db中没有设置字段的现有文档在获取时不会设置它。