这是我的架构:
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
吗?
答案 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
字段使用其他名称。