2014-09-24 58 views
2

我正在使用nodejs,猫鼬,我试图通过父母建立一个shema包含对自己的引用。父应该是对DataType的引用。猫鼬与自己的ObjectId自我引用投掷:投到ObjectId失败

var DataTypeSchema = new Schema({ 
    _id: String, 
    label: { type: String, required: true }, 
    comment: { type: String }, 
    url: { type: String, required: true }, 
    parent: { type: Schema.Types.ObjectId, ref: 'DataType' }, 
    values: [] 
}); 

var DataType = mongoose.model('DataType', DataTypeSchema); 
module.exports.DataType = DataType; 

每个数据类型都有自己的ID(不蒙戈产生的),我认为这是它会导致问题的地方。它会抛出一个错误强制objectid在路径“parent”的路径上的值为“Number”时失败,其中Number是已保存在DB中的ID为“Number”的对象。

感谢

回答

2

的类型parent引用必须在它所引用的模型_id的类型相匹配的。因此,而不是Schema.Types.ObjectId应该String

... 
parent: { type: String, ref: 'DataType' }, 
+0

谢谢快速答复。它正在工作,我可以在DB中看到它。只是想我是没有像** ObjectID(“数字”)**只** **数字**的东西。我在MongoDB和nodejs中都很新,所以我不确定它应该是这样的。 – 2014-09-24 13:59:23

+0

@ user2748323只要“数字”在集合中提供了唯一的'_id',那就完全正确了。 – JohnnyHK 2014-09-24 14:02:34

+0

有没有办法从猫鼬中直接得到**对象**树?我想代替父母:_id get ** parent:[Object] ** – 2014-09-25 13:18:44

0

你可以试试这个

parent: [ this ] 

它的工作原理

+4

请在您的答案中添加更多详细信息。 – 2016-03-24 14:30:35