我正在使用带有mongodb的nodejs 我们的团队目前正在构建一个简单的Android社区应用程序 由于我是服务器程序员,我想知道有没有更好的方法使用mongodb处理数据库。
上图显示了我们的申请 当用户点击文章(左图)时,应用程序移动到文章页面,文章内容(①右图像标记)和文章评论(②右图像标记)
我们成功创建了这些应用程序 但是有严重的问题:响应时间慢
应用程序通过每两个POST API提供数据 一个是 / selectBoardArticle ,它加载文章的内容,另一个是 / selectCommentList ,它加载文章的整个评论。 它要求提供文章的数据。
一些开发人员说两个请求导致极其响应时间。 因此,我尝试整合 / selectBoardArticle 和 / selectCommentList API。
我知道两个选项可以整合两个集合的数据 首先,使用db.collection.aggregate函数 这是 / selectBoardArticle API
的源代码app.post('/selectBoardArticle', util.session, function (req, res) {
TN_BBS.find({bbs_id: req.body.bbs_id, ntt_id: req.body.ntt_id, use_at: "Y"}).exec(function (err, result) {
if (result.length) {
//increase read count and save
result[0].rdcnt++;
result[0].save(function () {
//join comment(TN_COMMENT) and image(TN_FILEDETAIL) data of the article
TN_BBS.aggregate([{
"$lookup": {
from: "TN_COMMENT",
localField: "ntt_id",
foreignField: "ntt_id",
as: "COMMENT"
}
}, {
"$lookup": {
from: "TN_FILEDETAIL",
localField: "atch_file_id",
foreignField: "atch_file_id",
as: "TN_FILEDETAIL"
}
}, {
"$match": {
ntt_id: req.body.ntt_id,
bbs_id: req.body.bbs_id
}
}]).limit(1).exec(function (err, result) {
if (err) {
return res.send(err);
}
res.end(JSON.stringify(result[0]));
setPopPoint(req.body.ntt_id);
})
});
}
else
res.end("no result!");
});
其次,找到每篇文章和评论数据,并通过javascript
将评论数据插入到文章数据中router.get('/selectBoardArticles/:bbs_id', function (req, res) {
var query = {bbs_id: req.params.bbs_id, use_at: "Y"};
TN_BBS.find(query, function (err, doc) {
if (err) {
return res.send(err);
}
var ntt_ids = [];
for (var i = 0; i < doc.length; i++) {
ntt_ids.push(doc[i].ntt_id);
}
TN_COMMENT.find({bbs_id: req.params.bbs_id, ntt_id: {$in: ntt_ids}}, function (err, doc2) {
for (var i = 0; i < doc.length; i++) {
doc[i].comment = [];
for (var j = 0; j < doc2.length; j++)
if (doc2[j].ntt_id == doc[i].ntt_id) doc[i].comment.push(doc2[j]);
}
res.render('admin/board_articles', {data: doc, length: doc.length, boardMaster: req.params.bbs_id});
});
});
虽然这个API返回文章列表我想说的概念是找到两次并通过javascript插入子数据。
我发现加入集合时遇到的问题很少。
我觉得使用mongodb作为关系数据库是不推荐的。
MongoDB背后的想法是消除(或至少最小化) 关系数据。 https://stackoverflow.com/a/8129650/5593805
如果我理解正确,我应该避免加入收藏品 但我无法找到避免加入收藏品的方法 我应该将两个集合集成到一个集合中吗? 当有人经常在mongodb中使用聚合时,我认为最好使用关系数据库 我想知道你怎么想这个。
在mongodb中加入两个集合。
与关系数据库相比,我必须编写非常复杂的代码。
更具体地说,mongodb需要非常复杂的连接查询,这可以通过JOIN查询在mysql中轻松直观地完成,从而导致维护不良。
我想知道有没有更好更有效的方法在nodejs中加入mongoDB中的两个集合?