Ошибка приведения к ObjectId для значения «comments» в пути «_id» для модели «post» - PullRequest
1 голос
/ 23 мая 2019

Comments - это массив, вложенный в Post Schema. Я хочу обновить соответствующий пост, добавив новый комментарий в массив комментариев. Но получил ошибку: CastError: сбой приведения к ObjectId для значения «comments» по пути «_id» для модели «post»

  1. Читать похожие сообщения
  2. Пытался использовать "mongoose.Types.ObjectId", не работал
  3. Mongoose версия ^ 5.5.4
  4. Все идентификаторы, которые я здесь использую, действительны
const PostSchema = new Schema({
    ...
    comments: [
        {
            user: {
                type: Schema.Types.ObjectId,
                ref: 'user',
            },
            body: {
                type: String,
                required: [true, 'Content required'],
            },
        }
    ],
   ...
});
PostRouter.put('/posts/comments', (req, res) => {
    const { id } = req.query;
    const userID = req.body.user;
    const body = req.body.body;
    const comment = {
        user: userID,
        body: body,
    };

    Posts
        .update({ _id: id }, { $push: { comments: comment }})
        .then(result => {
            res.status(200).json(result.ok);
        })
        .catch(err => console.log(err));
});

У меня есть похожий: добавьте "friendID" в пользовательский модальный массив "friends" работает как положено.

const senderID = req.query.sender;
const recipientID = req.query.recipient; 

Users .update({ _id: recipientID }, { $push: { friends: senderID }}) 
.then(result => res.status(200).json(result.ok)) 
.catch(err => console.log(err)); 

но «комментарий», который я здесь пытаюсь добавить, - это объект вместо действительной строки идентификатора.

Я думаю, что проблема в массиве "Комментарии", потому что "comment.user" является ссылкой из моей "Пользовательской" схемы. Не знаю, как решить этот вложенный вопрос с ошибкой приведения.

1 Ответ

1 голос
/ 23 мая 2019

mongoose.Types.ObjectId является избыточным, если ID пользователя и _id являются действительными mongodb _id.

PostRouter.put('/posts/comments', (req, res) => {
const { id } = req.query;
const userID = req.body.user;
const body = req.body.body;
const comment = {
    user: userID,
    body: body,
};

Posts
    .update({ _id: id }, { $push: { comments: comment }})
    .then(result => {
        res.status(200).json(result.ok);
    })
    .catch(err => console.log(err));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...