Sobre sua primeira pergunta:
Você solicita especificamente uma maneira melhor de trabalhar com IDs filho que são armazenados no pai. Tenho certeza de que não há melhor maneira de lidar com isso, se tiver que ser esse padrão.
Mas esse problema também existe em bancos de dados relacionais. Se você deseja salvar sua postagem em um banco de dados relacional (usando esse padrão), também deve primeiro criar o comentário, obter seu ID e atualizar a postagem. Claro, você pode enviar todas essas tarefas em uma única solicitação, o que provavelmente é mais eficiente do que usar o mangusto, mas o tipo de trabalho que precisa ser feito é o mesmo.
Sobre sua segunda pergunta:
O benefício sobre a variante A é que você pode, por exemplo, obter a postagem e saber instantaneamente quantos comentários ela tem, sem pedir ao mongodb para examinar provavelmente centenas de documentos.
A vantagem sobre a variante B é que você pode armazenar mais referências a comentários em um único documento (uma única postagem), do que todo comentários, por causa do limite de tamanho de documento de 16 MB do mongos.
A desvantagem, no entanto, é a que você mencionou, que é ineficiente manter essa estrutura. Eu entendo que este é apenas um exemplo para mostrar o cenário, então aqui está o que eu faria:Eu decidiria caso a caso o que usar.
-
Se o documento for muito lido e não muito escrito, E é improvável que cresça mais do que 16 MB:Incorpore o subdocumento. desta forma, você pode obter todos os dados em uma única consulta.
-
Se você precisar fazer referência ao documento de vários outros documentos E seus dados realmente devem ser consistentes, então você não tem escolha a não ser referenciá-los.
-
Se você precisar fazer referência ao documento de vários outros documentos MAS consistência de dados não é tão importante E as restrições do primeiro marcador se aplicam, então incorpore os subdocumentos e escreva o código para manter seus dados consistentes.
-
Se você precisar fazer referência ao documento de vários outros documentos, e eles são gravados muito, mas não são lidos com tanta frequência, provavelmente é melhor fazer referência a eles, pois isso é mais fácil de codificar, porque você não precisa escrever código para sincronizar dados duplicados.
Neste caso específico (post/comentário) referenciando o pai do filho (deixando o filho conhecer os pais
_id
) é provavelmente uma boa ideia, porque é mais fácil de manter do que o contrário, e o documento pode crescer mais de 16 MB se eles forem incorporados diretamente. Se eu tivesse certeza de que o documento NÃO seria maior que 16 MB, incorporá-los seria melhor, porque é mais rápido consultar os dados dessa maneira