2017-08-30 97 views
4

在我的Food模式中,我根据名为yummy的其他字段具有不同的字段。例如:猫鼬模式创建空的数组字段

  • 如果yummy等于pancake,我的领域是doughjam
  • 如果yummy等于pizza,我的领域是doughmeatcheese

等。它的工作原理在保存预期docs - 我只是通过我想要保存的每个文档的字段,因为除了yummy之外,它们都不是必需的。 所以,如果我救:

{ 
    yummy: 'pizza' 
    dough: 'thin' 
    meat : 'peperroni', 
    cheese: [ObjectId("59a65a4f2170d90b0436ed4b")] // refs to the cheeses collection. 
} 

我的文档类似的预期。

问题是与type: Array的字段。当我保存:

{ 
    yummy: 'pancake', 
    dough: 'thick', 
    jam: 'blueberry' 
} 

我的文档保存有附加cheese: []场。在我的架构,奶酪定义如下:

Mongoose.model('Food', { 
    ... 
    cheese: { 
     type: [{ type: Mongoose.Schema.ObjectId, ref: 'Cheese' }], 
     required: false 
    }, 
    ... 
}); 

我检查,如果蒙戈需要文档有在更新中使用$push情况下,预定义为空数组场 - 事实并非如此。所以,问题是:如何避免在保存时向文档添加空数组字段?

+1

这取决于你的模式,如果你的模式有它定义了一个数组,它会创建一个空数组寿在创建文档。如果你想玩两个版本的集合(一个与奶酪,一个没有),创建两个版本的架构[看这里](https://stackoverflow.com/questions/14453864/use-more-than-one -schema-per-collection-on-mongodb) –

+1

谢谢,它有帮助。 – wscourge

+0

你是否发现了什么?我真的有兴趣 –

回答

5

当您保存文档时,猫鼬会查看相关集合的模式。

它需要你给它的所有领域,并设置值。它还为您没有提供任何内容的字段创建默认值。

这就是猫鼬的行为。


在你的情况下,我们能做什么?

我们要创建两个相同的集合相关的模式。一个与现场奶酪和一个没有。所以当你要保存一个没有cheese的模式的新文档时,它不会被创建。


在实践中,集合将保存两种不同的文档类型。

Here is a link about using multiple schema related to a single collection