Изображение не удаляется из базы данных в узле JS - PullRequest
0 голосов
/ 26 июня 2018

Я работаю над framework.js express и mongoose, и я совершенно новичок в этом. Это моя схема.

const mongoose = require('mongoose');

const ActivitySchema = mongoose.Schema({
    _id: mongoose.Schema.ObjectId,
    Activity:String,
    Photos:[{
        Photo:String,
    }]
});

module.exports =  mongoose.model('Activity', ActivitySchema);

Это мой код. Я удаляюсь, но данные не удаляются из базы данных.

router.delete('/removeactivity/:_id/:_pid', function (req, res) {         
    Activities.findByIdAndUpdate(
        { _id: req.params._id }, 
        { $pull: { Photos: { _id:req.params._pid } } },
        function(err,user) {
            if(err) {
                res.status(500).json(err);
            }
            res.status(200).json(user)
        }
    );        
})

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Чтобы получить новую версию документа, после применения обновления введите {new: true} в запросе. По умолчанию это false.

Activities.findByIdAndUpdate(
        { _id: req.params._id }, 
        { $pull: { Photos: { _id:req.params._pid } } },
        {new : true},
        function(err,user) {
            if(err) {
                res.status(500).json(err);
            }
            res.status(200).json(user)
        }
    );        
})
0 голосов
/ 26 июня 2018

Вы используете mongoose.Schema.ObjectId, поэтому ваше поле _id имеет значение ObjectId. В логике delete вы выбираете req.params._id, то есть, я думаю, строку, а не ObjectId, поэтому она не будет работать.

Чтобы создать ObjectId из строки, используйте mongoose.Types.ObjectId, например:

Activities.findByIdAndUpdate(
    { _id: mongoose.Types.ObjectId(req.params._id) },
    ...
)
...