MongoDB查询花费的时间太长

时间:2015-07-31 14:26:15

标签: node.js mongodb mongoose reactjs flux

问题:为用户创建第一个文档时,查询需要的时间太长

我正在创建一个模式报告的报告。我也有一个UserSchema。我在我的UI中创建了一个文档,并将该数据传递给一个post请求,即:

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);
    };

这样可以正常工作并按照我想要的方式创建对象,但是在创建文档后,我将UI中的状态设置为等待'等等。直到我可以通过我刚刚创建的这个新报告来接收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个文件,它甚至是如何立即找到所有这些文件的?我不知道为什么在这种情况下需要这么长时间,但我还没有能够提出解决方案,但我认为这与我查询的方式有关。

以下是我在UI中如何做的示例:

_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),然后getMyReport' get'向api请求属于我的所有报告,一旦返回它就会显示一个新的3个按钮渲染,一个用于查看该文档,一个用于查看我的所有文档,一个用于创建另一个报告。

1 个答案:

答案 0 :(得分:0)

我所做的只是请求所有文件,并在前端弄明白。它减少了ajax调用的时间,我只是在我的前端将其过滤掉,执行速度快,不会保持服务器。

相关问题