Идентификатор не удаляется из вложенного массива - PullRequest
1 голос
/ 17 июня 2019

Здравствуйте. Я пытаюсь удалить объект вложенного массива id из документа, но он не удаляется.Хотя я получаю сообщение "Deleted"

У меня есть ответ с такой структурой: -

{
    "admins": {
        "users": [
            "5d0364048db4957100f33fea" //<===want to delete this relational id
        ],
        "email": "1cf1eede89@himail.online",
        "password": "$2a$10$vHyGxX9P.t0/ybKcmIzkc.ZCX18oHaVnvTgJIWA2gTNzJ3TCdXS4a",
    "_id": "5d0339d5b4b28b6ddff06802",
    "companyName": "GH",
    "__v": 0
}

Я хочу удалить users _id из массива.

Я пробовал это, но это не удаляется.

router.delete('/userDelete/:uId', checkAuth , (req, res, next) =>{
    if(req.userData.role2 === 'admin') {
        Admin.findOneAndUpdate({ _id: req.params.userId },{ $pull: { 'admins.users': req.params.uId}}) 
        .exec()
        .then(result => {
            res.status(200).send(["Deleted"]);
        })
        .catch(err =>{
        if (err.code == 500)
                    res.status(500).send(["Didn't get deleted"]);
        else
            return next(err);
        });

Контроллер похож на это: -

var admin = new Admin();
    admin.companyName = req.body.companyName;
    admin.admins = {
                    email : req.body.email,
                    password: req.body.password,
                    users : [] 
    };

Я застрял здесь, какие изменения я должен сделать в моем маршруте?

РЕДАКТИРОВАТЬ: - БД, как это DB

Ответы [ 3 ]

1 голос
/ 17 июня 2019

Проблема здесь Admin.findOneAndUpdate({ _id: req.params.userId }

req.params.userId - это undefined , поскольку она не существует на вашем пути.req.params объект содержит только одно свойство, uId.Таким образом, ваш запрос не находит никаких данных.
req.params.userId будет иметь значение, если у маршрута вашего метода будет такая форма router.delete('/userDelete/:userId/:uId).
Так что вы можете добавить userId в URL вашего запроса на удаление и получить к нему доступ черезreq.params объект.Новый URL должен быть таким:

/userDelete/userId/uId

(например)

userDelete/5d0339d5b4b28b6ddff06802/5d0364048db4957100f33fea
0 голосов
/ 19 июня 2019

Попробуйте пометить '_id' как ложное в самой схеме для массива.Например, в вашей схеме пометьте «_id» как false, как показано ниже:

admin: {
  type: Object,
  users: [{
    _id: false
  }]
}
.
.
//rest of the schema
0 голосов
/ 17 июня 2019

попробуйте жестко закодировать ваш идентификатор здесь

Admin.findOneAndUpdate({ _id: req.params.userId },{ $pull: { 'admins.users': "5d0364048db4957100f33fea"}}) 

Если это работает, тогда сделайте

req.params.uId.toString()
...