2012-07-10 6 views
1

Mon document de utilisé pour ressembler à ceci:en utilisant le groupe MongoDB sur les documents intégrés

{ 
    _id : 47cc67093475061e3d95369d, 
    Name : "A name", 
    Description : "Some description", 
    DisciplineCode : "105", 
    DisciplineName : "A Name", 
    OtherProperty : "Something" 
} 

Pour qui, la commande groupe suivant a travaillé, afin d'obtenir les DisciplineNames distincts et DisciplineCodes de mes documents

disciplines = db.result.group({ 
    key: {DisciplineName:1, DisciplineCode:1}, 
    reduce: function(obj, prev) { if (!obj.hasOwnProperty("DisciplineName")) { 
     prev.DisciplineName = obj.DisciplineName; 
     prev.DisciplineCode = obj.DisciplineCode; 
    }}, 
    initial: { } 
}); 

Cependant, mon document a changé à:

{ 
    _id : 47cc67093475061e3d95369d, 
    Name : "A name", 
    Description : "Some description", 
    Discipline: { 
    Code : "105", 
    Name : "A Name"}, 
    OtherProperty : "Something" 
} 

Comme vous pouvez le voir, Discipline est un document intégré.

Comment puis-je modifier mon groupe de commande pour faire toujours le même?

+2

Can vous confirmez que votre fonction de réduction est correcte? Si obj n'a pas de champ "disciplineName", définissez le champ de nom du document précédent sur une valeur qui n'existe pas? – Jenna

Répondre

3

Je crois que vous essayez retourner un document qui répertorie toutes les combinaisons distinctes de code de discipline et son nom. Dans votre première commande de groupe, je ne pense pas que la fonction de réduction soit appelée (veuillez me corriger si je me trompe).

Pour obtenir toutes les combinaisons distinctes de la discipline maintenant que le code et le nom sont intégrés, vous pouvez utiliser la notation de points:

db.example.group({ 
    key: {"discipline.name": 1, "discipline.code":1}, 
    initial: {}, 
    reduce: function(obj, prev){} 
}) 
entrée

:

{ "_id" : 1, "doc" : { "name" : "Jenna", "number" : 1 } } 
{ "_id" : 2, "doc" : { "name" : "Jenna", "number" : 2 } } 
{ "_id" : 3, "doc" : { "name" : "Jenna", "number" : 2 } } 
{ "_id" : 4, "doc" : { "name" : "J", "number" : 2 } } 
{ "_id" : 5, "doc" : { "name" : "J", "number" : 1 } } 

Résultat:

[ 
     { 
      "doc.name" : "Jenna", 
      "doc.number" : 1 
     }, 
     { 
      "doc.name" : "Jenna", 
      "doc.number" : 2 
     }, 
     { 
      "doc.name" : "J", 
      "doc.number" : 2 
     }, 
     { 
      "doc.name" : "J", 
      "doc.number" : 1 
     } 
    ] 
+1

S'il vous plaît laissez-moi savoir si ce n'est pas ce que vous essayez d'accomplir. – Jenna

+0

pouvons-nous donner une condition aussi dans ce ?? –

Questions connexes