«Mongoose: ошибка приведения к идентификатору объекта для значения …», когда идентификатор не отправлен или не ожидается

#mongodb #express #mongoose #objectid

#mongodb #выразить #mongoose #objectid

Вопрос:

У меня есть эта схема:

 const fieldSchema = new mongoose.Schema
(
    {
       ...
        reserved_hours:
        [
            {
                start: Date,
                end: Date
            }
        ],
       ...
    }
);
 

и эта конечная точка

 router.get("/filter-by-date", async (req, res) => {
    let field_list = [];
    try {
        field_list = await Field.find({
            reserved_hours : {
                $elemMatch : {
                    start: {
                        $gte: req.query.datetime
                    }
                }
            }
        });
        res.status(200).json(field_list);
    } catch (err) {
        res.status(500).json({msg: err});
    }
});
 

Когда я пытаюсь связаться с ним с помощью
http://localhost:3005/field/filter-by-date?datetime=2021-01-21T11:11:16.347 01:00
Я получаю

 "msg": "Cast to ObjectId failed for value "filter-by-date" at path "_id" for model "Field""
 

Я предполагаю, что это ошибка filter-by-date _id , но я буквально понятия не имею, почему он это делает.
Заранее спасибо!

Ответ №1:

Я понял это сам. Все, что мне нужно было сделать, это переместить всю функцию выше этого

 router.get("/:id", getField, (req, res) => {
    res.json(res.field);
});
 

Я думаю, как только mongoose распознает путь, который ожидает _id , что он также отображает каждый путь под ним _id . Буквально не знаю, как и почему это происходит.