#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");
образом, я смогу получить данные своего проекта