我目前正在使用nodejs和mongoDB构建聊天应用 基本上我有两个集合要在db中维护。
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)
如果条件满足,请将已解析的模型发送给客户端并结束响应。
这不是我考虑嵌入的情况,因为当您需要更新用户数据时会很痛苦。 (嵌入消息,因为它仅在线程存在时才存在)
我不确定这是否是一个很好的方法。 有没有人有更好的解决方案?
很抱歉,如果我没有解释我的问题和解决方案足够清楚。 并提前感谢。