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 调用的时间,我只是在我的前端过滤掉它,它执行速度很快并且不会阻止服务器。
问题:为用户创建第一个文档时,查询时间过长
我正在创建报告模式报告。我也有一个 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 调用的时间,我只是在我的前端过滤掉它,它执行速度很快并且不会阻止服务器。