2016-08-08 8 views
0

Aus einem Produktarchiv habe ich eine MongoDB-Sammlung erstellt. Die relevanten Felder sind: sku, stock und date. Jedes Mal, wenn ein Produktbestand aktualisiert wird, gibt es einen neuen Eintrag mit dem Gesamtbestand.MongoDB-Abfragegruppe mit 'Untergruppe'

Die Skus bestehen aus zwei Teilen. Ein Elternteil, sagen wir "A" und eine Variante oder ein Kindteil, sagen "1", "2", "3", usw. Also könnte ein Sku so aussehen: "A2".

ich für eine einzelne Produkte Lager abfragen können, von Tag gruppiert, mit dieser Abfrage:

[{ 
     $match: { 
      sku: 'A2' 
     } 
    }, 
    { 
     $group: { 
      _id: { 
       year: {$year: '$date'}, 
       day: {$dayOfYear: '$date'} 
      }, 
      stock: { 
       $min: '$stock' 
      }, 
      date: { 
       $first: '$date' 
      } 
     } 
    }, 
    { 
     $sort: { 
      date: 1 
     } 
    }] 

Hinweis: Ich möchte den Mindestbestand für jeden Tag.

Aber ich muss für alle Variationen abfragen (Minimum) Aktien summiert. Ich kann das Objekt $ passen ändern:

[{ 
     $match: { 
      sku: /^A/ 
     } 
    } 

Wie erstelle ich eine "Untergruppe in der $ Gruppenphase?

EDIT:

Die Daten sieht wie folgt aus:

{ 
    sku: 'A1', 
    date: '2015-01-01', 
    stock: 15 
} 

{ 
    sku: 'A1', 
    date: '2015-01-01', 
    stock: 14 
} 

{ 
    sku: 'A2', 
    date: '2015-01-01', 
    stock: 20 
} 

Zwei Bestände für 'A1' und eine für 'A2' an einem einzigen Tag. Meine Abfrage (alle Skus gruppiert nach Tag) würde mir als Ergebnis 14 ($ min der 3 Werte) geben. Aber ich möchte, dass das Ergebnis 34 ist. 20 (min für A2) plus 14 (min für A1)

+0

Beschreibung des Dokuments wird am besten mit Code selbst verstanden, können Sie einige Beispieldokumente zeigen und was ist Ihre erwartete Ausgabe? – chridam

Antwort

0

Wenn Sie den Sku zum _id-Feld in der Gruppenphase hinzufügen, aggregiert er auch auf diesem, dh Gruppe per sku, Jahr & Tag.

db.stocks.aggregate(
[ 
    { 
    $group: { 
     _id: { 
      sku: '$sku', 
      year: {$year: '$date'}, 
      day: {$dayOfYear: '$date'} 
     }, 
     stock: { 
      $min: '$stock' 
     }, 
     date: { 
      $first: '$date' 
     } 
    } 
    }, 
    { 
    $sort: { 
     date: 1 
    } 
    }] 
) 
Verwandte Themen