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

时间:2015-04-02 05:25:07

标签: node.js mongodb mongoose

这是我的架构:

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吗?

1 个答案:

答案 0 :(得分:4)

恼人的罪魁祸首是元数据子文档中的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字段使用其他名称。