Heim  >  Artikel  >  Backend-Entwicklung  >  Mongo-Median-Operation in Golang

Mongo-Median-Operation in Golang

PHPz
PHPznach vorne
2024-02-08 23:33:08855Durchsuche

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

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

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

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen