2016-05-05 19 views
1

Die Tatsache, dass ich keine Dokumentation zu diesem Thema gefunden habe, bedeutet, dass ich wahrscheinlich dies in die falsche Richtung komme. Vielleicht könntest du helfen.Suchen Sie ein Dokument und aggregieren Sie ein Filialdokument

Ich versuche, alle Filme zu finden, wo Spielberg gutgeschrieben wurde. Ganz einfach:

Movies.find({credits.who: "Spielberg"}).exec(function....) 

Es gibt diese:

{ 
    credits: [{ 
     role: "director", 
     who: "Spielberg" 
    }, { 
     role: "writer", 
     who: "Spielberg" 
    }], 
    title : "The flying unicorn", 
    summary: "a unicorn flies" 
} 
{ 
    credits: [{ 
     role: "director", 
     who: "someone else" 
    }, { 
     role: "writer", 
     who: "Spielberg" 
    }], 
    title : "The falling unicorn", 
    summary: "a unicorn plumits to its death" 
} 

Aber ich will das Ergebnis auch einen neuen Eintrag von aggregierten Informationen haben:

{role: "director", #ofCredits: 1} 
{role: "writer", #ofCredits: 2} 

Wie kann ich das erreichen?

Antwort

1

Getestet Arbeiten völlig in Ordnung:

db.getCollection('test').aggregate([ 
{$match:{"credits.who":"Spielberg"}}, 
{$unwind:"$credits"}, 
{$project:{"credits.role":1,"credits.who":1}}, 
{"$group":{"_id":{"role":"$credits.role"},"#ofCredits":{"$sum": 1}}} 
]) 
Verwandte Themen