2017-02-07 6 views
0

brauchen Hilfe hier.

Ich habe zwei Sammlungen, die erste Sammlung ist nicht so groß mit ziemlich kleinen Dokumenten.

Die zweite hat viel mehr Elemente (Tausende, könnte viel mehr sein) mit mittelgroßen Dokumenten.

Es gibt eine Eigenschaft im ersten Dokument, die mit einer Eigenschaft im zweiten Dokument übereinstimmt.

Die Beziehung hier ist, dass Elemente in der ersten Auflistung viele andere Elemente in der zweiten Auflistung haben, die es verweisen.

Sagen Sie zum Beispiel, ich habe die erste Sammlung, die Personen darstellt und die zweite, die Kreditkartentransaktionen darstellt. Eine Person kann viele Transaktionen haben. PersonId ist die ID der Personenkollektion und jedes Transaktionsdokuments in der Transaktionssammlung.

Ich möchte eine Abfrage schreiben, um zu zählen, wie viele Übertragungen jede Person hat.

Ich habe gesehen, dass es empfohlen wird, Aggregat und Lookup zu verwenden. Aber wenn ich versuche, bekomme ich eine Nachricht, dass die Dokumentgröße Grenze überschreitet.

Ich vermute, dass dies ist, weil es eine Person mit all ihren Transaktionen in einem Dokument aggregiert ... nicht sicher, es ist das erste Mal überhaupt ich mit Mongodb erlebt.

Was wäre der beste Ansatz, um das zu erreichen? Ist die aggregierte Methode die richtige Wahl?

Danke! Gili

Antwort

0

können Sie einfache Gruppierung verwenden, um Transaktionen für jede Person

db.transactions.aggregate([ 
    { $group: {_id: "$personId", count: {$sum:1}}} 
]) 

Output Person IDs und Anzahl der Transaktionen enthalten, die für diese Person zählen zu bekommen. Sie können Personen- und Transaktionsstatistiken im Speicher abgleichen. Sie können die Suche auch verwenden, um Transaktionsstatistiken mit einigen Personendaten zurückzugeben. Aber denken Sie daran - Sie werden keinen Eintrag für Personen ohne Transaktionen abrufen:

db.transactions.aggregate([ 
    { $group: {_id: "$personId", count: {$sum:1}}}, 
    { $lookup: 
     { 
     from: "people", 
     localField: "_id", 
     foreignField: "_id", 
     as: "person" 
     } 
    }, 
    {$unwind: "$person"}, 
    {$project:{name:"$person.name", count:"$count"}} 
])