Maison  >  Article  >  développement back-end  >  Opération médiane de Mongo à Golang

Opération médiane de Mongo à Golang

PHPz
PHPzavant
2024-02-08 23:33:08891parcourir

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"`
}

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

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

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

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer