Mongoose模式创build空的数组字段
在我的Food
架构中,我有不同的领域,基于另一个领域称为yummy
。 例如:
- 如果
yummy
等于pancake
,我的田地是dough
和jam
- 如果
yummy
等于pizza
,我的田地是dough
,meat
和cheese
等等。它保存文档的预期工作 – 我只是通过我想要保存每个文件的字段,因为它们都不是必需的,除了yummy
。 所以如果我保存:
{ yummy: 'pizza' dough: 'thin' meat : 'peperroni', cheese: [ObjectId("59a65a4f2170d90b0436ed4b")] // refs to the cheeses collection. }
我的文件看起来像预期的。
问题是与type: Array
字段type: Array
。 当我保存:
{ yummy: 'pancake', dough: 'thick', jam: 'blueberry' }
我的文档保存有一个额外的cheese: []
字段。 在我的模式中,奶酪的定义如下:
Mongoose.model('Food', { ... cheese: { type: [{ type: Mongoose.Schema.ObjectId, ref: 'Cheese' }], required: false }, ... });
我检查了mongo是否需要在更新中使用$push
情况下, $push
数组字段预定义为空 – 它不会。 所以,问题是:如何避免在保存时向文档添加空数组字段?
在保存文档时,mongoose可以查看相关集合的模式。
它把所有的领域给你,并设置值。 它也为您没有提供任何内容的字段创build默认值。
这就是mongoose的行为。
在你的情况下,我们可以做什么?
我们要创build两个相同的集合相关的模式。 一个与现场奶酪和一个没有。 所以当你要保存一个没有cheese
的架构的新文档,它不会被创build。
在实践中,集合将拥有两种不同的文档types。
以下是有关使用与单个集合相关的多个模式的链接