我目前正在用 nodejs 和 mongoDB 构建一个聊天应用程序。
基本上我在数据库中有两个要维护的集合。
user = {
_id: ObjectId("1234"),
account: "stan123"
}
thread = {
_user: ObjectId("1234"),
messages: [
{
body:"hi"
_user:ObjectId("1234")
},
{
body:"second msg"
_user:ObjectId("1234")
}
]
}
我计划将带有所有已解析信息(用户)的线程模型传递给客户端,以便我可以用它构建我的小部件。我为此寻找解决方案。有人建议从客户端进行额外调用以获取数据。但是,我担心当消息量增加时,会有相当多的 http 调用可能会影响站点速度。
我知道一些驱动程序可以自动解析 DBRefs 并使代码干净。但是,根据 http://docs.mongodb.org/manual/applications/database-references/
我决定只使用 id 来维护参考,使其尽可能简单。
我的计划是解决服务器端的所有引用。当前的方法是首先获取消息数组的长度。然后遍历消息数组并进行第二次查询以分别解析用户信息。在每个查询回调中,执行 messageToResolve++ 和 if(messageToResolve >= thread.messages.length)
如果条件满足,则将解析后的模型发送给客户端并结束响应。
这不是我会考虑嵌入的情况,因为当您需要更新用户数据时会很痛苦。(消息是嵌入的,因为它仅在线程存在时才存在)
我不确定这是否是一个好方法。有没有人有更好的解决方案?
抱歉,如果我没有足够清楚地解释我的问题和解决方案。并提前感谢。