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.
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
In $limit
阶段之后,自 mongodb 版本 7.0 以来的一个选项是 $group
与 $median
Akkumulator
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
$sort
通过 rating
$group
和 $push
所有 rating
zu einem Array (alle 5 nach Limit) $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!