Node.js Mongoose默认值是否应用于现有文档?
如果我向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()–则查询只返回数据库中的内容,而不包括任何新添加的默认值(除非文档已加载并保存,如上所述)。您可以自定义默认值,以忽略文档已经存在的情况 您可以执行以
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({})也不强制执行默认参数。