问题:为用户创建第一个文档时,查询需要的时间太长
我正在创建一个模式报告的报告。我也有一个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个按钮渲染,一个用于查看该文档,一个用于查看我的所有文档,一个用于创建另一个报告。
答案 0 :(得分:0)
我所做的只是请求所有文件,并在前端弄明白。它减少了ajax调用的时间,我只是在我的前端将其过滤掉,执行速度快,不会保持服务器。