带有 $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数据查询orandwhere等用法

在 mongoose 中使用 distinct、or、skip、limit 和 sort

在 mongoose 中使用 distinct、or、skip、limit 和 sort

mongoose模糊查询

如何使用带有 OR 条件的#ifdef?