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