Mongoose模式创build空的数组字段

在我的Food架构中,我有不同的领域,基于另一个领域称为yummy 。 例如:

  • 如果yummy等于pancake ,我的田地是doughjam
  • 如果yummy等于pizza ,我的田地是doughmeatcheese

等等。它保存文档的预期工作 – 我只是通过我想要保存每个文件的字段,因为它们都不是必需的,除了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。

以下是有关使用与单个集合相关的多个模式的链接