具有嵌套可选对象的Mongoose Schema

时间:2016-07-07 14:39:17

标签: node.js mongodb mongoose mongoose-schema

使用以下架构:

{
  data1: String,
  nested: {
    nestedProp1: String,
    nestedSub: [String]
  }
}

当我new MyModel({data1: 'something}).toObject()显示新创建的文档时:

{
  '_id' : 'xxxxx',
  'data1': 'something',
  'nested': {
    'nestedSub': []
  }
}

即。使用空数组创建嵌套文档。

如何制作"嵌套"完全可选 - 即如果没有在输入数据上提供,则根本不创建?

不想为"嵌套"使用单独的架构,不需要那么复杂。

3 个答案:

答案 0 :(得分:15)

以下架构满足我原来的要求:

{
  data1: String,
  nested: {
    type: {
       nestedProp1: String,
       nestedSub: [String]
    },
    required: false
  }
}

有了这个,如果没有指定一个子文档,就会创建带有“missing”子文档的新文档。

答案 1 :(得分:1)

您可以使用strict: false

new Schema({
    'data1': String,
    'nested': {
    },
}, 
{
    strict: false
});

然后架构是完全可选的。要仅将nested设置为完全可选,您可以执行以下操作:

new Schema({
    'data1': String,
    'nested': new Schema({}, {strict: false})
});

但我从未尝试过

答案 2 :(得分:0)

没有其他Schema对象的解决方案可以使用类似以下的挂钩

MySchema.pre('save', function(next) {
  if (this.isNew && this.nested.nestedSub.length === 0) {
      this.nested.nestedSub = undefined;
  }
  next();
});