How to keep track of a private messaging system using MongoDB?
- by luckytaxi
Take facebook's private messaging system where you have to keep track of sender and receiver along w/ the message content. If I were using MySQL I would have multiple tables, but with MongoDB I'll try to avoid all that. I'm trying to come up with a "good" schema that can scale and is easy to maintain. If I were using mysql, I would have a separate table to reference the user and and message. See below ...
profiles table
user_id
first_name
last_name
message table
message_id
message_body
time_stamp
user_message_ref table
user_id (FK)
message_id (FK)
is_sender (boolean)
With the schema listed above, I can query for any messages that "Bob" may have regardless if he's the recipient or sender.
Now how to turn that into a schema that works with MongoDB. I'm thinking I'll have a separate collection to hold the messages. Problem is, how can I differentiate between the sender and the recipient? If Bob logs in, what do I query against? Depending on whether Bob initiated the email, I don't want to have to query against "sender" and "receiver" just to see if the message belongs to the user.