Оптимальный способ поиска и удаления из массива в Mongoose - PullRequest
4 голосов
/ 06 января 2012

Мне интересно, делаю ли я что-то не так, как я использую мангуста в экспрессе.Мой код просто не выглядит правильно.Для добавления чего-либо в документ требуется 2 запроса mongoose, и мне интересно, можно ли это упростить?Он ищет документ уведомления пользователя в коллекции, удаляет что-то из ожидающего массива и сохраняет его.Я хотел бы добавить еще 2 запроса, чтобы найти принятый пользователями документ запроса и добавить в него старый ожидающий документ, но в общей сложности 4 запроса и цикл в одном запросе ... это просто звучит неправильно ...

var acceptRequest = function(userId, requesterId, callback){

    NotificationsReference.findOne({ id: userId}, function(err, result){
        if(err || result === null){
            callback("Could not accept notification. Stack: " + err);
        }
        else{
            var deletedRefId = 'unchanged';
            for(i = 0; i < result.pending.length; i++){

               if( result.pending[i].refId = requesterId){
                   //Removing searched element of the array
                   deletedRefId = result.pending.splice(i, 1);
                   result.save(function (err) {
                   if (err) { 
                        callback("Error in saving request(2). Stack Trace: " + err); 
                    }
                    else{
                        callback("Success");
                    }

               }

            }

        }
    });

}

Ответы [ 2 ]

2 голосов
/ 23 ноября 2012

У меня была похожая проблема, но теперь я нашел решение.Вы можете удалить элемент из ожидающего массива, просто вызвав для него функцию удаления, а массивы mongoose реализуют это:

0 голосов
/ 06 января 2012

Что ж, если вы хотите что-то найти и обновить, всегда есть два запроса :-) Вы можете попытаться добавить пользовательскую ссылку в NotificationsReference через , заполнить и изменить их сразу после получения NotificationsReference.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...