如何使用MongoDB跟踪私人消息系统?

luc*_*axi 12 mongodb

以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"数组.我将能够告诉发件人是谁,并按时间戳排序.

luc*_*axi 2

弄清楚了。请参阅我在上面的原始帖子中的解释。