如果我向Mongoose架构添加属性并为其指定默认值,那么现有文档在加载时是否会收到这些默认值?
答案 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中没有设置字段的现有文档在获取时不会设置它。