Mongoose模式创建空数组字段

wsc*_*rge 1 javascript mongoose node.js mongoose-schema

在我的Food架构中,我根据其他字段调用了不同的字段yummy.例如:

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

它在保存文档时按预期工作 - 我只是传递我希望按文档保存的字段,因为除了之外都不需要它们yummy.所以,如果我保存:

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

我的文件看起来像预期的.

问题出在领域type: Array.当我保存:

{
    yummy: 'pancake',
    dough: 'thick',
    jam: 'blueberry'
}
Run Code Online (Sandbox Code Playgroud)

我的文档保存了一个附加cheese: []字段.在我的模式中,cheese定义如下:

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

我检查了mongo是否需要doc将数组字段预定义为空,以防$push在更新中使用 - 它没有.所以,问题是:如何避免在保存时向我的文档添加空数组字段?

Gré*_*EUT 5

保存文档时,mongoose会查看相关集合的架构.

它需要您提供的所有字段并设置值.它还为您没有提供任何内容的字段创建默认值.

那是猫鼬的行为.


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

我们将创建与同一集合相关的两个模式.一个用野外奶酪,一个没有.因此,当您要使用架构保存新文档时cheese,它不会被创建.


在实践中,该集合将包含两种不同的文档类型.

以下是有关使用与单个集合相关的多个架构的链接