Можете ли вы обновить строку, возвращаемую в обратном вызове then () после find ()? - PullRequest
0 голосов
/ 07 января 2019

Мне нужно найти строку пользователей в моей базе данных через имя пользователя user, затем использовать это имя пользователя, чтобы найти его запрос на добавление в друзья в таблице запросов, затем:

  • Обновление запроса для предотвращения дублирования запросов

  • Добавить уведомление в массив уведомлений пользователя

  • Передать пользователю через идентификатор сокета в его строке

Можете ли вы обновить строку монго в then ()?

Я пробовал это в моем обратном вызове:

requester.update({ $push: { 'notifications': {'msg': msg, 'type': type} } });

Это контекст:

      User.find({'username': requester}).exec()
      .then(requester => {
          Request.findOneAndUpdate({'requester': requester[0]._id, 'requestee': requestee.user._id}, {'status': 1}).then(function(){
              const msg = requestee.user.username + ' accepted your friend request ?',
                    type = 1;
              requester.update({ $push: { 'notifications': {'msg': msg, 'type': type} } });
              app.io.to(requester[0].socket).emit({'msg': msg, 'type': type});
          });
      })
      .catch(err => { 
         console.log(err);
      });

В настоящее время я получаю: Ошибка типа: requestter.update не является функцией

1 Ответ

0 голосов
/ 07 января 2019

Тогда вы можете обновить результат mongodb. Если вы используете $push, вы должны назвать модель, а не результат модели.

 User.update({ _id: 1 }, { $push: { 'notifications': {'msg': msg, 'type': type} } });

Это явно не работает, потому что requester это просто объект JavaScript из вашего User.find()

Примечание: если вы просто хотите найти одного пользователя, используйте findOne вместо find. find вернет массив, а findOne вернет объект

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