MongoDB 查询时间过长

MongoDB Query takes too long

问题:为用户创建第一个文档时,查询时间过长

我正在创建报告模式报告。我也有一个 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 中的状态设置为 'Wait' 直到我可以收到 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();
}

我执行添加新报告的操作('post' 向 API 请求),然后 getMyReport 'get' 向 api 请求所有属于我的报告,一旦 returns 它显示了 3 个按钮的新呈现,一个用于查看该文档,一个用于查看我的所有文档,一个用于创建另一个报告。

我所做的就是请求所有文件,并在前端解决。它减少了 ajax 调用的时间,我只是在我的前端过滤掉它,它执行速度很快并且不会阻止服务器。