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

Posted

技术标签:

【中文标题】CastError:路径“_id”处的值“”转换为 ObjectId 失败【英文标题】:CastError: Cast to ObjectId failed for value "" at path "_id" 【发布时间】:2014-06-20 02:43:45 【问题描述】:

嗯,我看到这里有一些这样的帖子,但它们对我没有帮助......

让我描述一下我的问题:

我有两个 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 加载的。调试器为我的 b 显示了一个有效的 ObjectId(53627ed535d9d04416e26218 或 Sb~Õ5ÙÐDâb)。

但是当我保存我的新 A-Object 时,我收到错误:'CastError: Cast to ObjectId failed for value "" at path "_id"'

我不明白为什么会出现此错误。 首先,我没有在模式中定义 id,所以猫鼬应该添加它,这似乎有效。 其次,我认为mongoose应该在我创建一个对象的时候生成一个新的ID。

你有什么建议吗?

【问题讨论】:

【参考方案1】:

根据代码中的注释,_id确实有一个值(null)。因此,您需要从 req.aFromClient 中删除 _id,然后再从中创建新的 A 文档:

delete req.aFromClient._id;
var a = new A(req.aFromClient);

【讨论】:

将其设置为 undefined 就足够了吗? @Laokoon 不,如果您希望 Mongoose 为您的新文档提供 _id 值,则不能在初始文档对象中包含 _id 属性。【参考方案2】:

你应该这样做:

a.b = existingBFromDatabase._id;

因为 mongoose 只适用于已经存在的对象的 id。

【讨论】:

以上是关于CastError:路径“_id”处的值“”转换为 ObjectId 失败的主要内容,如果未能解决你的问题,请参考以下文章

CastError:模型“Company”的路径“_id”处的值“...”转换为 ObjectId 失败

CastError:模型“Company”的路径“_id”处的值“...”转换为 ObjectId 失败

CastError:对于猫鼬中模型的路径“_id”处的值“findByName”,转换为 ObjectId 失败

CastError:对于猫鼬中模型的路径“_id”处的值“findByName”,转换为 ObjectId 失败

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

CastError:模型“用户”的路径“_id”处的值“未定义”转换为 ObjectId 失败