【发布时间】:2016-04-22 08:58:44
【问题描述】:
我对 nodejs 有点陌生。我正在构建一个类似 facebook 的应用程序。无论如何,我正在查询数据库,如代码所示。但是我在前端console.log的记录顺序是混乱的,不正确的,每次都不一样。你能告诉我我哪里弄错了吗?
router.get('/home', isAuthenticated, function(req, res){
var friendsIds = req.user.friends;
friendsIds.push(req.user.id);
var cbdone = 0;
Status.find({statuserId : {$in: friendsIds}}, null, {skip : 0, limit: 5, sort: {_id: -1}}, function(err, statuses) {
for (var i = 0; i < statuses.length; i++) {
(function(currStatus){
var currentStatus = currStatus;
var a = currentStatus._id.getTimestamp();
if(currentStatus.likedBy){
if (currentStatus.likedBy.indexOf(req.user.id) > -1) {
currentStatus.isLiked = true;
};
currentStatus.likersCount = currentStatus.likedBy.length;
} else {
currentStatus.isLiked = false;
currentStatus.likersCount = 0;
}
Comment.find({statusId : currentStatus.id}, null, {sort: {_id: -1}}, function(err, comments){
for (var i = comments.length - 1; i >= 0; i--) {
comments[i].likersCount = comments[i].likedBy.length;
comments[i].isLiked = comments[i].likedBy.indexOf(req.user.id) > -1;
};
currentStatus.comments = comments;
cbdone++;
if(cbdone === statuses.length){
res.render('home2', {
user: req.user,
statuses: statuses
});
}
});
})(statuses[i]);
};
});
});
【问题讨论】:
-
我看到的架构设计有点错误,你不应该有评论集合,你应该将 cmets 作为数组嵌入到 statuses 集合中,这样你会减少数量对数据库的大量请求
-
但是mongodb文档的一行有一些大小限制,cmets可以一直增长。我说得通吗?
-
是的,文档的阈值大小是 16mb,你应该得到很多 cmets 来制作它,无论如何你可以在 gridfs 中注册图像并且你的文档很少会超过 mb