2

我目前正在用 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)

如果条件满足,则将解析后的模型发送给客户端并结束响应。

这不是我会考虑嵌入的情况,因为当您需要更新用户数据时会很痛苦。(消息是嵌入的,因为它仅在线程存在时才存在)

我不确定这是否是一个好方法。有没有人有更好的解决方案?

抱歉,如果我没有足够清楚地解释我的问题和解决方案。并提前感谢。

4

0 回答 0