Mongodb获取每个文档的用户信息
mongodb getting user info for every document
我正在尝试显示一个论坛/类别。我需要得到最新的帖子。问题是,我还需要每个帖子的用户数据以及最新的回复。
db.post.find({
"inForum": forumID,
},
{
'sort': [['date', -1]]
},
function(err, cursor) {
cursor.count(function(err, count) {
cursor.skip(skip).limit(20).toArray(function(err, posts) {
var complete = _.after(nodes.length, function () {
res.send(posts)
});
// for every post get its author info and the latest post info
posts.forEach(function (post) {
var users = _.pluck(posts, 'user');
user.load(users, function (profiles) {
_.each(posts,
function(post, k) {
if (profiles[post.user]) post.fieldAvatar = profiles[post.user].fieldAvatar;
});
if (post.latestReply) {
post.load(post.latestReply.id, function (latestReply) {
if (latestReply) post.latestReply = latestReply
complete()
})
}
else {
complete()
}
})
})
});
})
})
这就是我正在做的,对我来说它看起来真的很慢/真的很不优雅。我这样做是正确的吗?有什么建议可以加快速度吗?
谢谢。
你最好在这里嵌入一些文章作者的信息(用户名&电子邮件或头像)到那些帖子中,这样你就不会对数据库进行多次查询,一次就足够了(当然你有一些重复的数据,但性能是最佳的)。
如果你不想/不能这样做,你也可以修改你的第二个查询来查找[array_of_ids_of_the_posts]中的所有作者。这将减少您的[number_of_posts]查询到只有一个。
您可以使用一些缓存。例如,你可以在循环期间将用户保存在字典中,这样你只需要在第一次从mongodb中获取它。
也许你可以创建某种线程模型,在其中保存包含帖子的基本信息,这样你只需要浏览线程。
您可以保存函数的结果,并在添加新帖子时删除它。所以我不会每次打电话都看所有的帖子。
您不应该使用像sql数据库这样的文档存储。也许最好在帖子创建/编辑时直接生成论坛页面,并将整个数据保存在文档中,这样您只需要对mongo进行一次read调用就可以显示它。
相关文章:
- 如何通过directline僵尸连接器发送用户信息
- 从下拉框中选择用户信息,并使用进度计数器显示数据库中的选定项目
- 在/user/后面显示用户名的用户信息
- AngularJS如何解码带有令牌和内部用户信息的jsonp响应
- 如何从JavaScript访问Django登录的用户信息
- 用于广告的 iframe ?获取用户信息
- 如何动态创建集合名称(取决于用户信息)
- 登录后的角度JWT和用户信息存储
- PhoneGap登录页面,如何保存用户信息
- 使用 PayPal API 登录:获取基本用户信息
- PHP/JavaScript 用户信息收集
- Parse JS SDK登录不使用AngularJs ui路由保持当前用户信息
- 用于确认用户信息的Javascript脚本
- Facebook Javascript SDK-访问用户信息
- 用于输入用户信息的动态PHP代码
- 如何将用户信息集成到我的Facebook应用程序中
- NodeJs-从JWT令牌中检索用户信息
- 在用户信息前插入值
- 从Facebook检索已验证的用户信息
- Mongodb获取每个文档的用户信息