【问题标题】:how to use OR condition inside mongoose如何在猫鼬中使用 OR 条件
【发布时间】:2021-09-18 23:09:38
【问题描述】:

我试图在我的查询中使用 OR 条件,但我不知道为什么它不工作,因为我在 mongodb 中知道使用 OR 条件我们必须这样写 $or

当我将自己的自定义 id 设为 projectId 时,我知道甚至 mongodb 也会创建自己的 id 为 _id

我的查询如下所示

const getProjectById = async (req, res) => {
  const { id } = req.params;
  let task = await Project.findOne({$or:{ projectId: id,_id:id}},
    }).populate("assignee");
  
};

但它不工作

因为我试图通过 _id 和我的自定义 ID 获取数据,即 projectId

所以这是我的相同数据

{
      "_id": "6145b0c7331a5a4634640f27",
      "projectId": "b0jyt9gvktpl6936",
      "projectName": "Gravity",
      "projectTag": [],
      "projectDescription": "Testing",
      "taskStatus": "notStarted",
      "assignee": null,
      "createdAt": "2021-09-18T09:26:31.801Z",
      "updatedAt": "2021-09-18T09:26:31.801Z",
      "__v": 0
    }

【问题讨论】:

  • 您必须给我们一份样本文件,我们无法知道您的数据库中的_id 或projectId 是什么类型,以及驱动程序上的id 变量是什么类型/可能的类型。如果我们假设 _id 是数据库中的 ObjectId,那么您的代码可以工作,那么 projectId 也应该是数据库中的 ObjectId,并且您应该在这两个 ObjectId 函数中添加。如果不是这种情况,那么您必须检查 id 的类型并决定要做什么。
  • 嗨@Takis_ 我已经从我的数据库中添加了示例文档

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:
const getProjectById = async (req, res) => {
  const { id } = req.params;
  let task = await Project.findOne({$or:[ {projectId: id},{_id:id}]}).populate("assignee");
  
};

【讨论】:

  • 嗨,我试过你的代码,但我只能通过_id获取数据,它不适用于我的projectId
  • 添加这个var ObjectId = require("mongodb").ObjectId;,然后用id替换ObjectId(id)
  • 你的意思是这样的?? $or: [{ projectId: ObjectId(id) }, { _id: ObjectId(id) }], ?
  • 没错,导入var ObjectId = require("mongodb").ObjectId;
  • 是的,但我仍然无法找到 projectId 的条目,但如果我像这样 let task = await Project.findOne({projectId:id}).populate("assignee"); 更改我的查询,我可以获得我的 projectID 数据
猜你喜欢
  • 2021-03-29
  • 2017-02-24
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2015-02-27
相关资源
最近更新 更多