嗯,我看到这里有几个这样的帖子,但是他们没有帮助我......
让我来描述我的问题:
我有两个Schema的
var A = new Schema({
someAttribut: {type: String},
b: {type: ObjectId, ref:'B'}
});
var B = new Schema({
someAttribut2: {type: Boolean, 'default': false'}
});
现在我的情况是我已经拥有一个B-Object而且我想创建一个A-Object。
所以我这样做:
var a = new A(req.aFromClient); // {_id:null, someAttribute:'123', b:null}
//load b from Database ...
a.b = existingBFromDatabase; // {_id: 'Sb~Õ5ÙÐDâb', someAttribute2: false}
b对象是从我的monogDB加载的。调试器为我显示了一个有效的ObjectId(53627ed535d9d04416e26218或Sb~Õ5ÙÐDâb)。
但是当我保存新的A-Object时,我收到错误:'CastError:对于路径“_id”
我不明白为什么会收到此错误。 首先,我没有在架构中定义id,所以mongoose应该添加它,这似乎有效。 其次,我认为当我创建一个对象时,mongoose应该生成一个新的ID。 你有任何建议吗?答案 0 :(得分:1)
根据代码中的评论,_id
确实的值为null
。因此,您需要先从_id
删除req.aFromClient
,然后才能从中创建新的A
文档:
delete req.aFromClient._id;
var a = new A(req.aFromClient);
答案 1 :(得分:0)
你应该这样做:
a.b = existingBFromDatabase._id;
因为mongoose只能使用现有对象的id。