簡體   English   中英

Mongoose 模式創建空數組字段

[英]Mongoose schema creates empty array field

在我的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 - 它不需要。 所以,問題是:如何避免在保存時向我的文檔添加空數組字段?

保存文檔時,貓鼬會查看相關集合的架構。

它需要您提供的所有字段並設置值。 它還為您沒有提供任何內容的字段創建默認值。

這就是貓鼬的行為。


在你的情況下,我們能做什么?

我們將創建與同一個集合相關的兩個模式。 一種有田間奶酪,一種沒有。 因此,當您使用不含cheese的架構保存新文檔時,它不會被創建。


在實踐中,集合將包含兩種不同的文檔類型。

這是有關使用與單個集合相關的多個架構的鏈接

只需將default: undefined設置為 field cheese 根據

...
cheese: { 
   type: [{ type: Mongoose.Schema.ObjectId, ref: 'Cheese' }], 
   required: false,
   default: undefined
},
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM