[英]Mongoose schema creates empty array field
在我的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
- 它不需要。 所以,問題是:如何避免在保存時向我的文檔添加空數組字段?
保存文檔時,貓鼬會查看相關集合的架構。
它需要您提供的所有字段並設置值。 它還為您沒有提供任何內容的字段創建默認值。
這就是貓鼬的行為。
在你的情況下,我們能做什么?
我們將創建與同一個集合相關的兩個模式。 一種有田間奶酪,一種沒有。 因此,當您使用不含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.