带有 $or 条件的 Mongoose findOne 方法会引发错误
Posted
技术标签:
【中文标题】带有 $or 条件的 Mongoose findOne 方法会引发错误【英文标题】:Mongoose's findOne method with $or condition throws an errror 【发布时间】:2019-02-23 08:45:38 【问题描述】:我正在尝试从 mongodb 检索数据。目前我有一个文件,我首先从中获取要搜索 mongodb 的 ID。当不满足第一个条件并尝试使用第二个条件进行搜索时,查询会引发错误。请问我该如何解决?
我检查了this,但这里的情况不同
从文件中检索的值示例
let idValue = student_id ? student_id : id
idValue = stu_367
示例数据库结构
const Student = new Schema(
id: Number,
studentId: String,
firstName: String
lastName: String,
.....
)
let studentInfo = await Student.findOne(
$or: ["studentId": `$idValue` , "id": idValue
)
我收到此错误Cast to number failed for value "stu_367" at path "id" for model "Student"
【问题讨论】:
【参考方案1】:您定义的学生模式说 id 类型是 Number,因此在运行查询时,您将字符串值作为 id 提供,因此您应该在模式中使用 String 类型而不是 Number 作为 id,如下所示:
const Student = new Schema(
id: String,
studentId: String,
firstName: String
lastName: String,
.....
)
let studentInfo = await Student.findOne(
$or: ["studentId": `$idValue` , "id": idValue
)
【讨论】:
问题是我可以使用什么查询来完成这项工作,因为架构不应该改变@Ashish 我认为您不能这样做,因为您已经将 id 字段类型定义为 Number 并且您期望匹配 String 类型,这与定义的架构本身相矛盾以上是关于带有 $or 条件的 Mongoose findOne 方法会引发错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 OR 条件使用 mongoose 删除 MongoDB 中的文档
在 mongoose 中使用 distinct、or、skip、limit 和 sort