Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose默认值是否应用于现有文档?_Node.js_Mongodb_Mongoose_Mongoose Schema - Fatal编程技术网

Node.js Mongoose默认值是否应用于现有文档?

Node.js Mongoose默认值是否应用于现有文档?,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,如果我向Mongoose模式添加属性并为其提供默认值,现有文档在加载时是否会收到这些默认值?是,但如果查询是lean 对于返回完整Mongoose文档对象的查询–Thing.find({…})–无论架构何时更改,只要属性丢失,都将返回默认值。如果随后保存文档,则默认值将在数据库中实现 如果查询是lean–Thing.find({…}).lean()–则查询只返回数据库中的内容,而不包括任何新添加的默认值(除非文档已加载并保存,如上所述)。您可以自定义默认值,以忽略文档已经存在的情况 您可以执行以

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

是,但如果查询是
lean

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


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

您可以自定义
默认值
,以忽略文档已经存在的情况

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

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

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

如何在现有文档上使用lean with mongo默认值?最终,我不得不使用(和其他许多人一样)
.lean()
.Collection.aggregate({})也不强制执行默认参数。