Удалить с помощью _id внутри вложенного массива, внутри коллекции - PullRequest
0 голосов
/ 19 сентября 2019

это моя коллекция футболистов mongoDb:

[
    {
        "_id" : ObjectId("5d83b4a7e5511f28847f1884"),
        "prenom" : "djalil",
        "pseudo" : "dja1000",
        "email" : "djalil@gmail.com",
        "selectionned" : [ 
            {
                "_id" : "5d83af3be5511f28847f187f",
                "role" : "footballeur",
                "prenom" : "Gilbert",
                "pseudo" : "Gilbert",
            }, 
            {
                "_id" : "5d83b3d5e5511f28847f1883",
                "role" : "footballeur",
                "prenom" : "Xavier",
                "pseudo" : "xav4544",
            }
        ]
    },

    {
        "_id" : ObjectId("5d83afa8e5511f28847f1880"),
        "prenom" : "Rolande",
        "pseudo" : "Rolande4000",
        "email" : "rolande@gmail.com",
        "selectionned" : [ 

            {
                "_id" : "5d83b3d5e5511f28847f1883",
                "role" : "footballeur",
                "prenom" : "Xavier",
                "pseudo" : "xav4544",
            }
        ]

    }

}

Как я могу удалить всех выбранных людей, которые имеют 5d83b3d5e5511f28847f1883 _id через всю коллекцию?

Мне нужен ксавье, чтобы исчезнуть излюбой «выделенный» массив, точно так же как и «удалить каскад» на языке SQL

Это то, что я безуспешно пытался:

   function delete_fb_from_all(fb){
        var ObjectId = require('mongodb').ObjectID; //working
        var idObj = ObjectId(fb._id); //working

    try {
            db.collection('footballers').remove( { "selectionned._id" : idObj } );
            console.log('All have been erased');    

        } catch (e) {
            console.log(e);
    }

}

И это тоже не работает:

db.collection('footballers.selectionned').remove( { "_id" : idObj } );

Я действительно не знаю, как это сделать.

Я пробую это прямо сейчас:

db.collection.update({'footballers.selectionned':  idObj }, {$pull: {footballers:{ selectionned:  idObj}}})

Это ошибка:

TypeError: db.collection.update is not a function

Я думаю, что решение может быть там: https://docs.mongodb.com/manual/reference/operator/update/pull/#pull-array-of-documents

РЕДАКТИРОВАТЬ 1

В настоящее время я пробую это:

var ObjectId = require('mongodb').ObjectID; //working
        var idObj = ObjectId(fb._id); //working
        try {
            db.collection('footballers').update(
              { },
              { $pull: { selectionned: { _id: idObj } } },
              { multi: true }
            )
        } catch (e) {
            console.log(e);

        }

РЕШЕНО:

Указывая адрес электронной почты, он теперь работает, я думаю, проблема была в поле _id:

try {
    db.collection('footballers').update(
      { },
      { $pull: { selectionned: { email: fb.email } } },
      { multi: true }
    )
} catch (e) {
    console.log(e);

}

1 Ответ

0 голосов
/ 20 сентября 2019

Идентификатор объекта:

Возможно, проблема связана с созданием идентификатора объекта.Нет необходимости создавать идентификатор строки с идентификатором объекта mongoDB.

    // No need
    var ObjectId = require('mongodb').ObjectID;
    var idObj = ObjectId(fb._id);

    // do as normal string
    db.collection('footballers').remove( { "selectionned._id" : fb._id } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...