2015-07-31 2 views
0

Проблемы: При создании первого документа для пользователя, запрос занимает слишком много времениMongoDB Запрос занимает слишком много

Я создаю какой-нибудь отчет, Отчет схемы. У меня также есть UserSchema. Я создаю документ в моем UI и передавать эти данные на запрос поста, который это:

exports.addSubReport = function(req,res) { 

     var id = req.body.masterform; 
     var subform = new Report(); 
     var myDate = Date(); 
     subform.title = req.body.title; 
     subform.date = req.body.date; 
     subform.date = myDate; 
     subform.owner = req.user; 
     subform.body = req.body.body; 
     subform.save(); 
     Report.findById(id, function (err, report) { 
      if(err) { 
      res.redirect('/404NotFound'); 
      } 
      else { 
      report.subreport.push(subform); 
      subform.parentReport = report; 
      report.save(); 
      } 
     }); 
     User.findById(req.body.id, function (err, user) { 
      user.forms_created.push(subform); 
      subform.owner = req.user; 
      subform.authors[0] = user.profile.firstName + " " + user.profile.lastName; 
      subform.author = user; 
      subform.save(); 
     }); 

     res.json(req.body); 
    }; 

это прекрасно работает и создает объект, как я хочу его, однако после создания документа я установить состояние в моем пользовательском интерфейсе «Подождите», пока я не смогу получить JSON с этим новым отчетом, который я только что создал. Это GET код запроса:

exports.allMyReports = function(req, res) { 
var id = req.user._id; 
     var totalproc = 0; 
     var dupe = []; 
     Report.find({"author" : id}, function (err, form) { 
      dupe = form; 

      dupe.forEach(function (person) { 

       User.findById(person.author, function (err, user) { 
        if (!err) { 
         person.authors[0] = user.profile.firstName + " " + user.profile.lastName; 
         person.save(); 
         totalproc = totalproc + 1; 

        } 
        if (totalproc == dupe.length) { 
         res.json(dupe); 
        } 
       } 

       ); 
      }); 


     }); 
}; 

Однако проблема заключается в том, что на каждом первом сообщении я создаю для пользователя, это занимает очень много времени. Это, скорее всего, запрос поиска по автору, но я хорошо подумал ... если у пользователя уже 15 документов, то как он вообще может найти все эти документы? Я понятия не имею, почему это так долго в этом случае, хотя и я еще не смог найти решение, но я думаю, что это связано с тем, как я спрашиваю.

Вот пример того, как я это сделать в пользовательском интерфейсе:

_onCreateReport =() => { 
    const title = React.findDOMNode(this.refs.title).value; 
    const date = React.findDOMNode(this.refs.date).value; 
    const body = React.findDOMNode(this.refs.body).value; 
    ReportsActions.addNewReport({ 
     title: title, 
     date: date, 
     body: body 
    }); 
    ReportsActions.getMyReports(); 
} 

я выполнить действие добавления нового отчета («пост» запрос к API), а затем «GET» getMyReport запрос api для всех отчетов, принадлежащих мне, после того, как он возвращается, отображается новый рендер из трех кнопок, один для просмотра этого документа, один для просмотра всех моих документов, один для создания другого отчета.

+0

Это происходит только при создании первого отчета? или для создания каждого отчета? – eddyjs

+0

Только первый первоначальный отчет, если для этого пользователя имеется какое-то количество документов> 1, задача выполняется почти мгновенно. – Karan

+0

Вы говорите, делаете Report.find ({}), где я запрашиваю все документы, затем начинаю итерацию через возвращаемый массив для пользователя? Да, я тоже так думаю, я уже начал это делать. Что касается реагирующей части, я просто вызываю ajax-вызов (POST-запрос), все внутри addNewReport - это данные, которые я отправляю для моего запроса POST, и я также вызываю запрос GET, но он асинхронен. Комментирует результаты! – Karan

ответ

0

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

Смежные вопросы