Maison > développement back-end > Golang > le corps du texte

Opération médiane de Mongo à Golang

PHPz
Libérer: 2024-02-08 23:33:08
avant
896 Les gens l'ont consulté

Opération médiane de Mongo à Golang

L'opération médiane de Mongo à Golang est une technologie importante qui revêt une grande importance pour les développeurs. Cela nous permet d'être plus flexibles et efficaces dans le traitement des bases de données Mongo. Dans Golang, nous pouvons utiliser les opérations médianes Mongo pour implémenter diverses opérations de données, telles que l'insertion, la mise à jour et la suppression. Cette méthode informatique nous permet de mieux utiliser les puissantes fonctions de Mongo et d'améliorer notre efficacité de développement. Cet article présentera l'utilisation et les précautions du fonctionnement médian de Mongo dans Golang à travers des cas pratiques pour aider les développeurs à mieux maîtriser cette technologie.

Contenu de la question

J'ai une collection en mongo (go) dont le type est :

type CreateFeedbackRequest struct {
    UserID     string    `json:"user_id" validate:"required"`
    WaybillID  uint64    `json:"waybill_id" validate:"required"`
    Rating     int       `json:"rating" validate:"required"`
    Comment    string    `json:"comment"`
    ReceivedAt time.Time `json:"received_at" validate:"required"`
}
Copier après la connexion

J'ai besoin d'évaluer la note médiane d'un certain utilisateur (via son user_id)的最后 5 条记录(通过 receivedAt champ horaire). J'ai ça :

matchStage := bson.D{{"$match", bson.D{{"_id", userID}}}}
sortStage := bson.D{{"$sort", bson.D{{"created_at", 1}}}}
limitStage := bson.D{{"$limit", tripsCount}}

cursor, err := r.c.Aggregate(ctx, mongo.Pipeline{matchStage, sortStage, limitStage})
Copier après la connexion

Mais je ne sais pas comment obtenir la note médiane de ces 5 lignes. Je ne suis pas sûr de la bonne façon de procéder. Au secours, merci

Solution

Dans $limit 阶段之后,自 mongodb 版本 7.0 以来的一个选项是 $group$median Accumulateur

groupgStage := bson.D{{"$group", bson.D{
  {"_id", 0}, 
  {"median", bson.D{{"$median", 
    bson.D{{"$input", "$rating"}, {"method", "approximate"}}
  }}}
}}}
Copier après la connexion

Pour les anciennes versions, vous pouvez

  1. $sort 通过 rating
  2. $group$push 所有 rating à un tableau (tous les 5 après la limite)
  3. $project L'élément au milieu du tableau

Cela ressemble à ceci :

sortRatingStage := bson.D{{"$sort", bson.D{{"rating", 1}}}}
groupStage := bson.D{{"$group", bson.D{{"_id", 0}, {"ratings", bson.D{{"$push", "ratings"}}}}}}
projectStage := bson.D{{"$project", bson.D{
  {"_id", 0}, 
  {median, bson.D{{"$arrayElemAt", bson.D{
    {"$ratings", bson.D{{"$floor", bson.D{
      {"$divide", bson.A{{bson.D{{"$size", "$ratings"}}, 2}}}
    }}}}
  }}}}
}}}}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal