为什么我的 Mongoose 模式缺少其中一个字段?

Why is my Mongoose schema missing one of its fields?

这是我的架构:

var RegionSchema = new Schema({
  "metadata": {
    "type": String,
    "name": String,
    "children": [{
      "name": String,
      "type": String
    }],
    "parent": Schema.ObjectId
  },

  "data": [DataContainer]
});

这是我正在编写的单元测试,我在其中存储了这个对象的一个​​实例,其中包含一些空值:

describe('Region with no data', function() {
  it('Should save without error', function(done) {
    var emptyRegion = new Region({
      "metadata": {
        "type": "City",
        "name": "San Diego",
        "children": [],
        "parent": null
      },

      "data": []
    });

    emptyRegion.save(function(err, saved) {
      console.log(saved)
      if (err) throw err;
      if (saved.metadata.name === "San Diego")
        done();
    })
  });
});

但是,当我尝试打印保存的内容时,我得到了这个:

{ __v: 0, _id: 551cd261cc55c5ff48c8150b, data: [] }

为什么我的 metadata 对象没有保存?甚至在 save 调用之前,emptyRegion 看起来就是这样。我没有正确定义我的 metadata 吗?

令人讨厌的罪魁祸首是元数据子文档中的 type 字段。 Mongoose 将其解释为元数据的类型为 String 并且具有一堆不相关的属性。将您的架构定义更改为以下内容,它应该可以工作:

var RegionSchema = new Schema({
  "metadata": {
    "type": {"type": String},
    "name": String,
    "children": [{
      "name": String,
      "type": {"type": String}
    }],
    "parent": Schema.ObjectId
  },

  "data": [DataContainer]
});

或者,为您的 type 字段使用不同的名称。