5

如果我将属性添加到 Mongoose 模式并为其提供默认值,现有文档在加载时会收到这些默认值吗?

4

2 回答 2

9

是的,但如果查询是lean.

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

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

于 2016-01-28T16:09:02.173 回答
0

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

取而代之的是default: Date.now,即使未在数据库中设置,现有文档在获取时也会显示当前日期,您可以这样做:

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

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

于 2017-12-15T01:23:18.930 回答