как использовать ИЛИ состояние внутри мангуста

#node.js #mongodb #mongoose #mongodb-query

Вопрос:

Я пытаюсь использовать ИЛИ условие в своем запросе, но я не понимаю, почему это не работает, как я знаю, в mongodb, чтобы использовать ИЛИ условие, мы должны написать так $or

Поскольку я создал свой собственный идентификатор, projectId и я знаю, что даже mongodb создает свой собственный идентификатор как _id

мой запрос выглядит следующим образом

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

но это не работает

поскольку я пытаюсь получить данные как _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
    }
 

Комментарии:

1. Вы должны предоставить нам 1 образец документа, мы не можем знать, какого типа ваш _id в вашей базе данных или идентификатор проекта, а также какой тип/возможные типы является переменной идентификатора драйвера. Ваш код будет работать, если мы предположим, что _id является объектом в базе данных, то ProjectID также должен быть объектом в базе данных, и вы должны добавить обе функции ObjectId. Если это не так, то вы должны проверить тип идентификатора и решить, что делать.

2. привет @Takis_ я добавил образец документа из своей базы данных

Ответ №1:

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

Комментарии:

1. Привет, я попробовал ваш код, но я могу получить данные только по _id тому, что он не работает с моим projectId

2. добавьте это var ObjectId = require("mongodb").ObjectId; , а затем замените ObjectId(id) на id

3. ты имеешь в виду вот так ?? $or: [{ projectId: ObjectId(id) }, { _id: ObjectId(id) }], ?

4. да точно и импорт var ObjectId = require("mongodb").ObjectId;

5. да, но все равно я не могу найти запись с projectId помощью, но если я изменю свой запрос таким let task = await Project.findOne({projectId:id}).populate("assignee"); образом, я смогу получить данные своего проекта