Ответы пользователя по тегу MongoDB
  • Почему MongoDB работает медленно?

    @Faliah
    В тэгах вижу mongoose. Пара советов по работе с ним: попробуйте поиграться с ограничением полей через find().select(/* объект с полями */). По умолчанию mongoose возвращает коллекцию своих обёрток над JS-объектами, которые довольно тяжелые. Получить POJO можно с помощью find().lean(). Чтобы не ждать, пока вам вернётся вся коллекция из 1500 записей, можно воспользоваться курсорами со стримами и работать с данными пачками.

    Но тут действительно сложно сказать в чём проблема - железо действительно не плохое, но проблема скорее всего в IO цикле, как это обычно и бывает, в зависимости от количества узлов между клиентом, сервером и сервером БД. Может у вас прокси перед сервером стоит и не тянет под нагрузкой, может сервер перегружен запросами и вы ждёте в очереди, может к БД много коннектов и вы, опять же, ждёте.
    Ответ написан
    1 комментарий
  • Как "обойти" асинхронность в данном примере?

    @Faliah
    Ваш первый res.send отправляет все заголовки и тело, что завершает вес процесс запрос-ответ и закрывает возможность использовать текущий объект res для отправки чего-либо. В данном случае вам нужно убрать из кода первый вызов res.send и вы получите "Hello 2". Никаих обходов асинхронности, глобальных переменных и прочего вам не нужно. Переменная res будет и так доступна внутри коллбэка, если вы не перекрываете её где-то в области видимости.
    Ответ написан
    Комментировать
  • Как вернуть данные из модели, выбранные с помощью findOne (mongoose)?

    @Faliah
    С использованием Promise делается очень просто:
    UsersSchema.methods.checkAuth = function(cookie) {	
      if(typeof cookie.crowder_main != 'undefined') {	
        var getUser = new Promise(function(resolve, reject) {
          this.model('Users')
          	    .findOne({hash: cookie.crowder_main})
                .exec(function (err, user){    
                  if (err) reject(err);
                  resolve(user)
        	    });
        })	
        getUser
        	.then(function(user) {
              // user получен - продолжаем работать с ним в контроллере
            })
            .catch(function(err) {
          	  // Обработка ошибки
            })
      } 	
    }
    Ответ написан
    Комментировать