以facebook的私人消息系统为例,您必须跟踪消息内容的发送方和接收方.如果我使用的是MySQL,我会有多个表,但是对于MongoDB,我会尽量避免这一切.我正在努力想出一个可以扩展并且易于维护的"好"模式.如果我使用的是mysql,我会有一个单独的表来引用用户和消息.见下文 ...
个人资料表
user_id first_name last_name
消息表
message_id message_body time_stamp
user_message_ref表
user_id (FK) message_id (FK) is_sender (boolean)
使用上面列出的模式,我可以查询"Bob"可能拥有的任何消息,无论他是收件人还是发件人.
现在,如何将其转换为适用于MongoDB的模式.我想我会有一个单独的集合来保存消息.问题是,我如何区分发件人和收件人?如果Bob登录,我该查询什么?根据Bob是否发起了电子邮件,我不想查询"发件人"和"收件人"只是为了查看该邮件是否属于该用户.
我点击了MongoDB的消息组,并找到了可能有用的东西.每条消息都将被视为"博客"帖子.创建消息时,将两个用户(无论最初发送者/接收者最初)添加到数组中.之后的每个响应都将被视为注释,该注释将插入到数组中.
留言{ "_id" :, "users" : ["bob", "amy"], "user_msgs" : [ { "is_sender" : "bob", "msg_body" : "Hi Amy, how are you?!", "timestamp" : } { "is_sender" : "amy", "msg_body" : "Bob, long time no see, how is the family?!", "timestamp" : } ] }
这样我就可以查询涉及"Bob"的消息,并循环访问"user_msgs"数组.我将能够告诉发件人是谁,并按时间戳排序.