在我的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
字段。当我保存时:
{
yummy: 'pancake',
dough: 'thick',
jam: 'blueberry'
}
我的文档会另外保存cheese: []
字段。在我的模式中,cheese定义如下:
Mongoose.model('Food', {
...
cheese: {
type: [{ type: Mongoose.Schema.ObjectId, ref: 'Cheese' }],
required: false
},
...
});
我检查了mongo是否需要doc将数组字段预定义为空,以防更新中使用$push
- 它没有。所以,问题是:如何避免在保存时向文档添加空数组字段?
答案 0 :(得分:5)
当您保存文档时,猫鼬会查看相关集合的架构。
它会占用您提供的所有字段并设置值。它还为您没有提供任何内容的字段创建默认值。
这就是猫鼬的行为。
在您的情况下,我们可以做些什么?
我们将创建与同一集合相关的两个架构。一个用野外奶酪,一个没有。因此,当您使用没有cheese
的架构保存新文档时,它将不会被创建。
实际上,该集合将包含两种不同的文档类型。
Here is a link about using multiple schema related to a single collection
答案 1 :(得分:0)
只需将 default: undefined
设置为字段 cheese
。根据{{3}}。
...
cheese: {
type: [{ type: Mongoose.Schema.ObjectId, ref: 'Cheese' }],
required: false,
default: undefined
},
...