【问题标题】:Mongoose _id of type String not throwing error [duplicate]字符串类型的猫鼬_id不抛出错误[重复]
【发布时间】: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


【解决方案1】:

我不是专家,但要在 mongoose 中获取 id

你必须使类型等于mongoose.Schema.Types.ObjectId

type : mongoose.Schema.Types.ObjectId 

【讨论】:

  • 这不是对所提问题的回答。 _id 中需要存储非 ObjectId 值,因此 typeString
猜你喜欢
  • 2018-06-15
  • 1970-01-01
  • 2014-05-20
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
相关资源
最近更新 更多