Per quanto riguarda la tua prima domanda:
Chiedi in particolare un modo migliore per lavorare con gli ID figlio archiviati nel genitore. Sono abbastanza sicuro che non esiste un modo migliore per affrontare questo problema, se deve essere questo schema.
Ma questo problema esiste anche nei database relazionali. Se vuoi salvare il tuo post in un database relazionale (usando quel modello), devi anche prima creare il commento, ottenere il suo ID e quindi aggiornare il post. Certo, puoi inviare tutte queste attività in un'unica richiesta, il che è probabilmente più efficiente rispetto all'utilizzo di mangusta, ma il tipo di lavoro che deve essere svolto è lo stesso.
Per quanto riguarda la tua seconda domanda:
Il vantaggio rispetto alla variante A è che puoi, ad esempio, ottenere il post e sapere immediatamente quanti commenti ha, senza chiedere a mongodb di esaminare probabilmente centinaia di documenti.
Il vantaggio rispetto alla variante B è che puoi memorizzare più riferimenti ai commenti in un unico documento (un singolo post), che intero commenti, a causa del limite di dimensioni del documento di 16 MB di mongos.
Il rovescio della medaglia, tuttavia, è quello che hai menzionato, che è inefficiente mantenere quella struttura. Presumo che questo sia solo un esempio per mostrare lo scenario, quindi ecco cosa farei:deciderei caso per caso cosa usare.
-
Se il documento verrà letto molto e non verrà scritto molto, E è improbabile che cresca più grande di 16 MB:incorporare il documento secondario. in questo modo puoi ottenere tutti i dati in un'unica query.
-
Se è necessario fare riferimento al documento da più altri documenti E i tuoi dati devono essere davvero coerenti, quindi non hai altra scelta che farvi riferimento.
-
Se è necessario fare riferimento al documento da più altri documenti MA la coerenza dei dati non è così importante AND si applicano le restrizioni del primo punto elenco, quindi incorpora i documenti secondari e scrivi il codice per mantenere coerenti i tuoi dati.
-
Se è necessario fare riferimento al documento da più altri documenti e vengono scritti molto, ma non letti così spesso, probabilmente è meglio fare riferimento a loro, poiché è più facile codificare, perché non è necessario scrivere codice per sincronizzare i dati duplicati.
In questo caso specifico (post/commento) fare riferimento al genitore del bambino (far conoscere al bambino i genitori _id
) è probabilmente una buona idea, perché è più facile da mantenere rispetto al contrario e il documento potrebbe aumentare di dimensioni superiori a 16 MB se fossero incorporati direttamente. Se sapessi per certo che il documento NON sarebbe più grande di oltre 16 MB, incorporarli sarebbe meglio, perché è più veloce interrogare i dati in questo modo