node.js - node - mongoose документация




Mongoose удаляет(тянет) документ в массиве, не работает с ObjectID (3)

Кажется, что приведенный выше код не будет работать. Это не должно было сработать даже для первого примера, который я привел.

В конце концов меня поддержал этот ответ здесь: MongoDB, удалить объект из массива

Вот мой рабочий код:

userAccounts.update( 
      { userId: usr.userId },
      { $pull: { connections : { _id : connId } } },
      { safe: true },
      function removeConnectionsCB(err, obj) {
          ...
      });

У меня есть следующая схема Мангуста:

user = {
    "userId" : "myId",
    "connections":
    [{
        "dateConnectedUnix": 1334567891,
        "isActive": true
    }, {
        "dateConnectedUnix": 1334567893,
        "isActive": false
    }]
}

Я хотел бы удалить второй элемент в массиве connections , чтобы получить следующее:

user = {
    "userId" : "myId",
    "connections": 
    [{
        "dateConnectedUnix": 1334567893,
        "isActive": false
    }]
}

Следующий код выполняет работу, как ожидалось:

userAccounts.update({'connections.isActive': false }, 
                    {$pull: { 'connections.isActive':false }}, 
                    function (err,val) {
                        console.log(val)
                    });

Но мне нужно удалить на основе ObjectId. И следующее идет не работает:

userAccounts.update({'connections._id': '1234-someId-6789' }, 
                    {$pull: { 'connections._id': '1234-someId-6789' }}, 
                    function (err,val) {
                        console.log(val)
                    });

Какие-либо предложения? Я часами бился головой об экран (он же Google, Stackoverflow, ...) и мне не повезло.


У меня есть документ как

Я должен удалить адрес из массива адресов

После поиска лотов в интернете я нашел решение

 Customer.findOneAndUpdate(query, {$pull: {address: addressId}}, function(err, data){
        if(err) {
          return res.status(500).json({'error' : 'error in deleting address'});
        }

        res.json(data);

      });

мангуст: 4.11.11
Для меня сработал следующий синтаксис:

const removeTansactionFromUser = (userId, connectionId) => {
    return User.findByIdAndUpdate(userId, { $pull: { "connections": connectionId} }, {'new': true} );
};

Mongoose поддерживает идентификатор в формате строки или ObjectId.
Совет: new ObjectId(stringId) для переключения со строки на ObjectId





mongoose