Mongo-Median-Operation in Golang

PHPz
Freigeben: 2024-02-08 23:33:08
nach vorne
894 Leute haben es durchsucht

Mongo-Median-Operation in Golang

Der Mongo-Medianbetrieb in Golang ist eine wichtige Technologie, die für Entwickler von großer Bedeutung ist. Dadurch können wir flexibler und effizienter mit Mongo-Datenbanken umgehen. In Golang können wir Mongo-Medianoperationen verwenden, um verschiedene Datenoperationen wie Einfügen, Aktualisieren und Löschen zu implementieren. Diese Rechenmethode ermöglicht es uns, die leistungsstarken Funktionen von Mongo besser zu nutzen und unsere Entwicklungseffizienz zu verbessern. In diesem Artikel werden die Verwendung und Vorsichtsmaßnahmen des Mongo-Median-Betriebs in Golang anhand praktischer Fälle vorgestellt, um Entwicklern dabei zu helfen, diese Technologie besser zu beherrschen.

Frageninhalt

Ich habe eine Sammlung in Mongo (go), deren Typ ist:

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"`
}
Nach dem Login kopieren

Ich muss die mittlere Bewertung eines bestimmten Benutzers auswerten (über sein user_id)的最后 5 条记录(通过 receivedAt Zeitfeld). Ich habe das:

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})
Nach dem Login kopieren

Aber ich weiß nicht, wie ich die Durchschnittsbewertung dieser 5 Zeilen ermitteln soll. Ich bin mir nicht sicher, wie ich das richtig machen soll. Hilfe, danke

Lösung

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

groupgStage := bson.D{{"$group", bson.D{
  {"_id", 0}, 
  {"median", bson.D{{"$median", 
    bson.D{{"$input", "$rating"}, {"method", "approximate"}}
  }}}
}}}
Nach dem Login kopieren

Für ältere Versionen können Sie

  1. $sort 通过 rating
  2. $group$push 所有 rating zu einem Array (alle 5 nach Limit)
  3. $project Das Element in der Mitte des Arrays

Es sieht so aus:

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}}}
    }}}}
  }}}}
}}}}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonMongo-Median-Operation in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage