Maison  >  Article  >  développement back-end  >  Comment récupérer le nombre d'éléments en fonction de plusieurs valeurs d'attribut dans MongoDB à l'aide d'un pipeline d'agrégation ?

Comment récupérer le nombre d'éléments en fonction de plusieurs valeurs d'attribut dans MongoDB à l'aide d'un pipeline d'agrégation ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 19:20:29459parcourir

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

Récupérer la liste des éléments en vérifiant plusieurs valeurs d'attribut dans MongoDB

Lorsque vous travaillez avec MongoDB, il devient souvent nécessaire de récupérer des éléments spécifiques en fonction de plusieurs valeurs d'attribut, similaires à la condition IN utilisée dans MySQL. Cet article montre comment y parvenir en utilisant une combinaison d'opérations de pipeline dans MongoDB.

Cadre d'agrégation

Dans ce scénario, nous utiliserons le cadre d'agrégation pour construire un pipeline qui filtre et regroupe les données d'une collection MongoDB connue sous le nom de « venueList ». L'objectif est de récupérer le nombre total d'utilisateurs avec des systèmes d'exploitation spécifiques, tels que Linux ou Ubuntu, sur la base d'une liste d'identifiants de sites.

Étapes du pipeline

Le Le pipeline se compose de plusieurs étapes qui fonctionnent ensemble pour transformer et résumer les données :

  1. $match : Filtre la collection en fonction des identifiants de lieu spécifiés, garantissant que seuls les documents pertinents sont pris en compte. .
  2. $unwind : Dénormalise les tableaux "venueList" et "sum" pour créer des documents individuels pour chaque lieu et distribution d'agent utilisateur.
  3. $match : Filtre à nouveau les documents dénormalisés pour garantir que seuls les identifiants de lieu souhaités sont inclus.
  4. $unwind : Dénormalise davantage le tableau "somme" pour créer des documents individuels pour chaque distribution d'agent utilisateur .
  5. **$group:** Agrége les documents dénormalisés à l'aide de l'opérateur $cond pour créer des champs distincts pour chaque système d'exploitation (par exemple, "linux" et "ubuntu"). L'opérateur $sum est utilisé pour calculer le nombre total d'utilisateurs pour chaque système d'exploitation.

Sortie attendue

La sortie finale du pipeline d'agrégation sera un document contenant le nombre total d'utilisateurs Linux et Ubuntu pour les ID de site spécifiés :

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

Implémentation Go

Pour utiliser ce pipeline dans Go à l'aide du package mgo , vous pouvez suivre ces étapes :

<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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn