2013-06-04 7 views
2

Je suis assez nouveau pour MongoDB et le mouvement NoSQL, si vide avec moi. Jusqu'à présent, je suis venu à travers trois différentes façons de « joindre » collections:MongoDB - DBRefs vs Map/Réduire vs Références Manuel

  1. garder manuellement une référence « foreign-key-ESK » à la collection que vous souhaitez joindre à votre collection cible
  2. Utilisez DBRefs
  3. Ecrire une série de fonctions Map/Reduce pour maintenir la relation

quelqu'un peut-il expliquer les avantages et quand je dois chacun? Ma première impression est que Map/Reduce est pour les grands ensembles fréquemment utilisés et les deux autres sont principalement destinés aux petites/rapides requêtes.

+2

Je dirais que vous ne devriez jamais maintenir une jointure à travers un MR et DBRef est juste une autre version du premier, il n'y a pas de différence, sauf DBRef détient également un nom de collection – Sammaye

+0

Intéressant. Connaissez-vous un moyen d'optimiser les références afin que vous n'ayez pas besoin de faire une requête supplémentaire du client pour récupérer l'enregistrement référencé? Est-il possible de faire cela sur le serveur avant que l'ensemble de données ne soit retourné? – Adam

+0

Non, mongodb n'a pas de résolution de référencement côté serveur – Sammaye

Répondre

1

Désolé pour la réponse tardive - voici un exemple simple de document incorporé écrit dans mangouste:

var postSchema = new Schema({ 
    author : {type : String}, 
    title : {type : String, require : true}, 
    content : {type : String, require : true}, 
    comment : { 
    owner : {type : String}, 
    subject : {type: String, require}, 
    content : {type String, require} 
    } 
}); 

Le document est ici le postSchema (bien est le schéma, mais je suppose que vous savez ce que je veux dire) .
Le comment est le document incorporé dont vous pouvez voir qu'il est un objet défini dans la publication.
L'avantage est que vous obtenez le commentaire à chaque fois que vous appelez post sans requête supplémentaire, mais si vous avez beaucoup de commentaires, cela rend le document post très volumineux!

+0

Merci. J'ai fini par avoir un deuxième schéma pour les commentaires afin que je puisse les référencer par le propriétaire ou par Post (pour emprunter la structure de nommage dans votre exemple). Cela semblait être le meilleur ajustement pour mes cas d'utilisation particuliers, bien que je puisse voir qu'avec MongoDB et les bases de données basées sur des documents, vous devez orienter votre pensée un peu différemment. – Adam

+0

Je suis d'accord, il faut un certain temps pour passer du SGBDR aux DB basés sur les documents. –