Mongoose 默认值是不是适用于现有文档?
Posted
技术标签:
【中文标题】Mongoose 默认值是不是适用于现有文档?【英文标题】:Do Mongoose defaults get applied to existing documents?Mongoose 默认值是否适用于现有文档? 【发布时间】:2016-05-06 02:47:34 【问题描述】:如果我将属性添加到 Mongoose 架构并为其指定默认值,现有文档在加载时会收到这些默认值吗?
【问题讨论】:
【参考方案1】:您可以自定义default
以忽略文档已经存在的情况。
除了default: Date.now
,即使没有在数据库中设置,现有文档在获取时也会显示当前日期,您可以这样做:
default: function()
if (this.isNew)
return Date.now();
return void 0;
现在,没有在数据库中设置字段的现有文档在获取时不会设置它。
【讨论】:
【参考方案2】:是,但如果查询是lean
,则不是。
对于返回完整 Mongoose 文档对象的查询 - Thing.find(...)
- 无论何时更改架构,只要缺少该属性,就会返回默认值。如果随后保存该文档,则默认值将在数据库中实现。
如果查询是 lean
– Thing.find(...).lean()
– 查询只返回数据库中的内容,并且不包括任何新添加的默认值(除非文档已加载并保存,如上所述)。
【讨论】:
我们如何在现有文档上使用带有 mongo 默认值的精益?最终,我必须使用(和其他许多人一样).lean()
。
Collection.aggregate() 也不使用默认参数。以上是关于Mongoose 默认值是不是适用于现有文档?的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose:当要保存的文档中不存在时,在必填字段中设置默认值