Maison  >  Article  >  développement back-end  >  Comment compter efficacement les occurrences d'agent utilisateur sur plusieurs sites dans MongoDB à l'aide de Go ?

Comment compter efficacement les occurrences d'agent utilisateur sur plusieurs sites dans MongoDB à l'aide de Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 11:00:02127parcourir

How to Efficiently Count User Agent Occurrences Across Multiple Venues in MongoDB Using Go?

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

L'objectif est de récupérer une liste d'éléments dans MongoDB en faisant correspondre plusieurs valeurs d'attribut, similaires à la condition IN dans SQL. Dans ce cas, l'objectif est de compter les occurrences des agents utilisateurs « Linux » et « Ubuntu » dans un document JSON contenant un tableau de listes de lieux. Chaque liste de lieux comporte un tableau de sous-documents de somme, qui contiennent les noms et les valeurs de l'agent utilisateur.

La solution implique l'utilisation du cadre d'agrégation dans MongoDB et du package mgo dans Go. Voici une répartition du pipeline d'agrégation :

  1. Filtrer par ID de lieu : Utilisez le pipeline $match pour sélectionner les documents dont le champ venueList.id correspond aux ID de lieu souhaités (par exemple, "VID1212" et "VID4343").
  2. Dérouler la liste des lieux : Utilisez le pipeline $unwind pour dénormaliser le tableau venueList, en créant des documents séparés pour chaque lieu.
  3. Filtrer l'ID de lieu : Après le déroulement, filtrez à nouveau les documents pour vous assurer que seuls les identifiants de lieu souhaités restent.
  4. Découlez le sous-document de somme : Détendez le tableau de sous-document de somme pour dénormaliser le noms et valeurs de l'agent utilisateur.
  5. Groupe et somme : Utilisez le pipeline $group pour regrouper les documents par nom d'agent utilisateur et additionnez les valeurs correspondantes à l'aide de l'opérateur $sum.
  6. Créer des champs de comptage indépendants : Pour plus de lisibilité, vous pouvez utiliser des opérateurs ternaires ($cond) dans le pipeline $group pour créer des champs de comptage indépendants pour "linux" et "ubuntu".
  7. Approche alternative pour de meilleures performances : Pour une alternative plus efficace, vous pouvez utiliser un pipeline $group légèrement différent pour agréger le nombre d'agents utilisateurs et les regrouper par nom.

Enfin , convertissez le pipeline d'agrégation en Go à l'aide de la méthode mgo.Collection.Pipe() pour l'exécuter sur la collection MongoDB. Cela renverra une liste d'éléments avec leurs décomptes associés pour les agents utilisateurs et les identifiants de lieu spécifiés.

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