CastError:对于路径“_id”处的值“”,转换为ObjectId失败

时间:2014-05-03 12:52:06

标签: node.js mongodb mongoose

嗯,我看到这里有几个这样的帖子,但是他们没有帮助我......

让我来描述我的问题:

我有两个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。

你有任何建议吗?

2 个答案:

答案 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。

相关问题