【发布时间】:2020-02-22 23:33:00
【问题描述】:
我在 Mongoose 中有一个架构:
const member = new Schema({
_id: { type: String, required: true },
...
});
但是当我在快速请求处理程序中使用 await MemberModel.findOne({ _id: req.params.userID }); 时,我得到一个 CastError: Cast to ObjectId failed for value "MY_SECRET_VALUE" at path "_id" for model "Member".
如您所见,我在架构中将_id 的类型设置为String - 为什么不允许我通过字符串值搜索_id?
【问题讨论】:
-
你需要
{ _id: false }在“模式选项”(Schema函数的第二个参数)。没有它,mongoose 仍然会尝试使用它的“内置”方法来验证_id的输入,当然它默认需要ObjectId。 -
谢谢 - 据我所知,副本的第一个答案并没有说这是必要的。
-
好吧,“第一个”甚至被接受的不一定是正确的(公平地说,自从编写“第一个”答案以来,API 发生了一些变化)。那里的其他答案确实说这是必要的,但可能不会修饰原因。因此,我自己的评论要澄清。
标签: javascript node.js mongodb mongoose