2017-08-30 82 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