为什么我的 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
字段使用不同的名称。
这是我的架构:
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
字段使用不同的名称。