Heim >Backend-Entwicklung >Golang >Wie kann ich die Artikelanzahl basierend auf mehreren Attributwerten in MongoDB mithilfe der Aggregation Pipeline abrufen?

Wie kann ich die Artikelanzahl basierend auf mehreren Attributwerten in MongoDB mithilfe der Aggregation Pipeline abrufen?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 19:20:29536Durchsuche

How to Retrieve Item Count Based on Multiple Attribute Values in MongoDB using Aggregation Pipeline?

Elementliste durch Überprüfen mehrerer Attributwerte in MongoDB abrufen

Bei der Arbeit mit MongoDB ist es häufig erforderlich, bestimmte Elemente basierend auf mehreren abzurufen Attributwerte, ähnlich der in MySQL verwendeten IN-Bedingung. In diesem Artikel wird gezeigt, wie Sie dies mithilfe einer Kombination von Pipeline-Operationen in MongoDB erreichen.

Aggregations-Framework

In diesem Szenario verwenden wir das Aggregations-Framework, um eine zu erstellen Pipeline, die Daten aus einer MongoDB-Sammlung namens „venueList“ filtert und aggregiert. Ziel ist es, die Gesamtzahl der Benutzer mit bestimmten Betriebssystemen wie Linux oder Ubuntu basierend auf einer Liste von Veranstaltungsort-IDs abzurufen.

Pipeline Stages

Die Die Pipeline besteht aus mehreren Phasen, die zusammenarbeiten, um die Daten zu transformieren und zusammenzufassen:

  1. $match: Filtert die Sammlung basierend auf den angegebenen Veranstaltungsort-IDs und stellt so sicher, dass nur relevante Dokumente berücksichtigt werden .
  2. $unwind: Denormalisiert die Arrays „venueList“ und „sum“, um individuelle Dokumente für jeden Veranstaltungsort und jede Benutzeragentenverteilung zu erstellen.
  3. $match: Filtert die denormalisierten Dokumente erneut, um sicherzustellen, dass nur die gewünschten Veranstaltungsort-IDs enthalten sind.
  4. $unwind: Denormalisiert das Array „sum“ weiter, um individuelle Dokumente für jede Benutzeragentenverteilung zu erstellen .
  5. **$group:** Aggregiert die denormalisierten Dokumente mithilfe des $cond-Operators, um separate Felder für jedes Betriebssystem zu erstellen (z. B. „Linux“ und „Ubuntu“). Der $sum-Operator wird verwendet, um die Gesamtzahl der Benutzer für jedes Betriebssystem zu berechnen.

Erwartete Ausgabe

Die endgültige Ausgabe der Aggregationspipeline wird sein ein Dokument, das die Gesamtzahl der Linux- und Ubuntu-Benutzer über die angegebenen Veranstaltungsort-IDs hinweg enthält:

<code class="json">{
  "_id": null,
  "linux": 14,
  "ubuntu": 4
}</code>

Go-Implementierung

Um diese Pipeline in Go mit dem mgo-Paket zu verwenden , können Sie diesen Schritten folgen:

<code class="go">query := []bson.M{
  {"$match": bson.M{"venueList.id": bson.M{"$in": []string{"VID1212", "VID4343"}}}},
  {"$unwind": "$venueList"},
  {"$match": bson.M{"venueList.id": bson.M{"$in": []string{"VID1212", "VID4343"}}}},
  {"$unwind": "$venueList.sum"},
  {
    "$group": bson.M{
      "_id":        nil,
      "linux":      bson.M{"$sum": bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"$venueList.sum.name", "linux"}}, "$venueList.sum.value", 0}}},
      "ubuntu":     bson.M{"$sum": bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"$venueList.sum.name", "ubuntu"}}, "$venueList.sum.value", 0}}},
    },
  },
}</code>

Das obige ist der detaillierte Inhalt vonWie kann ich die Artikelanzahl basierend auf mehreren Attributwerten in MongoDB mithilfe der Aggregation Pipeline abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn