невозможно использовать $ pull (Mon goose) для удаления объекта в массиве для пользовательской модели - PullRequest
1 голос
/ 22 января 2020

Я пробовал различные методы и способы сделать это, я пытаюсь использовать метод $ pull

Это мой пользовательский объект

enter image description here

Ранее у меня был только идентификатор объекта в пользовательском объекте, но теперь, когда я удаляю полный объект, я ищу идентификатор публикации, а затем пытаюсь извлечь его

    router.delete('/testing', (req, res, next) => {
    postModel.findByIdAndRemove(req.query.postid, (error, returnedDocuments) => {
        if (error) return next(error);

        userModel.findOneAndUpdate(
            // { email: req.query.email, posts: req.query.postid },
            { email: req.query.email },
            { $pull: { posts: { number: mongoose.Types.ObjectId(req.query.postid) } } },
            { new: true },
            function(error, user) {
                if (error) {
                    res.json(error);
                }
                console.log(`Post id ===== ${req.query.postid}`);
                console.log(`Email===== ${req.query.email}`);
                console.log(`returning user====${user}`);
                res.json('Successfully updated user');
            }
        );
    });
});

сообщение удаляется из постмодели, но я не могу удалить объект из массива созданных пользователями публикаций.

Любые альтернативные решения или идеи о том, почему это происходит, будут оценены.

1 Ответ

0 голосов
/ 22 января 2020

Проблема в том, что MongoDB сравнивает типы перед значениями, и не применяется неявное преобразование типов, поэтому вместо:

{ $pull: { posts: { number: req.query.postid } } }

вам нужно выполнить:

{ $pull: { posts: { number: mongoose.Types.ObjectId(req.query.postid) } } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...