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 失败