Estrutura do MongoDB para o aplicativo de mensagens

Estou pensando em uma boa estrutura de documentos para lidar com um aplicativo de mensagens.

Eu basicamente preciso de três (ou quatro) tipos de objetos:

O usuário (nome de usuário, email, senha, etc.)A lista de contatos (contendo diferentes contatos ou grupos de contatos)A conversa (uma conversa é uma coleção de mensagens entre algumas pessoas)A mensagem (contém o corpo da mensagem, alguns timestamp e o criador.)

Minha ideia era incorporar os contatos no documento do usuário e incorporar as mensagens em um documento de conversação:

1. Usuário

{
    username: 'dev.puS',
    usernameCanonical: 'dev.pus', // used for unique constraints
    email: '[email protected],
    emailCanonical: '[email protected],
    salt: 'some hash',
    password: 'hash with salt',
    logs: { last_login: 12.06.2008, last_password_reset: 04.03.2007 },
    state: { online: true, available: false },
    contacts: [ user_id1, user_id2, user_id3 ]
}

2. Conversa

{
    members: [ user_id1, user_id2 ],
    messages: [
        { author: user_2, body: 'Hi what's up' },
        { author: user_1, body: 'Nothing out here :(' },
        { author: user_2, body: 'Whanna ask some question on stackoverflow' },
        { author: user_1, body: 'Okay, lets go' }
    ]
}

O que você acha desse esquema?

Eu acho que seria melhor mantê-los separados (para cada documento por si próprio), porque cada documento tem uma frequência de atualização diferente. Mas eu realmente não tenho nenhuma experiência sobre isso, então seria bom ouvir alguns conselhos :)

Saudações

questionAnswers(3)

yourAnswerToTheQuestion