Mon goose удалить элемент массива в документе - PullRequest
2 голосов
/ 26 февраля 2020

Привет, я застрял в этой точке, у меня есть модель команды, которая приведена ниже.

var teamSchema = new mongoose.Schema({
name:{
    type : String
},
members :[
    {
        type: mongoose.Schema.ObjectId,
        ref: 'Users'
    }
],
leads:[
    {
        type: mongoose.Schema.ObjectId,
        ref: 'Users'
    }
],
admin_rights :[
    {
        type: mongoose.Schema.ObjectId,
        ref: 'Users'
    }
],
view_rights :[
    {
        type: mongoose.Schema.ObjectId,
        ref: 'Users'
    }
]
});

Я делаю ссылку на User Schema в этой модели. Я хочу удалить один элемент в массиве leads. Я пытался много раз, но он показывает следующее ..

{
"n": 1,
"nModified": 0,
"opTime": {
    "ts": "6797745245908893697",
    "t": 4
},
"electionId": "7fffffff0000000000000004",
"ok": 1,
"operationTime": "6797745245908893697",
"$clusterTime": {
    "clusterTime": "6797745245908893697",
    "signature": {
        "hash": "Sdl1QzsqCcO7SKS95+N1Gx7rkJY=",
        "keyId": "6762348659485966337"
    }
}
}

это код для удаления элемента массива, но он не работает.

router.get('/deletelead', (req, res) => {
var _id = req.query.team_id;
var id_to_delete = req.query.id;


Team.update({ _id: _id }, { "$pull": { "leads": { id_to_delete }  } }, { safe: true }, function(err, obj) {
    if(!err){
        res.json(obj)
    }
    else
    res.json(err)
});
});

Я проверял другие те же вопросы на stackoverflow, но Я не могу решить свою проблему.

Какой будет правильный запрос для достижения этой цели?

1 Ответ

1 голос
/ 26 февраля 2020

Вы можете попробовать код ниже:

const mongoose = require('mongoose');

router.get('/deletelead', (req, res) => {
    var _id = req.query.team_id;
    var id_to_delete = req.query.id;

    Team.update({ _id: mongoose.Types.ObjectId(_id) }, { "$pull": { "leads": mongoose.Types.ObjectId(id_to_delete) } }, function (err, obj) {
        if (!err) {
            res.json(obj)
        }
        else
            res.json(err)
    });
});

Есть несколько изменений:

  1. Вам необходимо преобразовать все значения в тип ObjectId(), если эти поля имеют тип ObjectId() в базе данных.
  2. Также в $pull значение может быть непосредственно присвоено leads, но не как объекту.
  3. Вам не нужно указывать safe :true как все mon goose схемы по умолчанию для этой опции. Ссылка: пн goose -безопасная опция
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...