Golang中的Mongo中位數運算是一項重要的技術,對開發人員來說具有很大的意義。它可以讓我們在處理Mongo資料庫時更加靈活和有效率。在Golang中,我們可以使用Mongo中值運算來實現各種資料操作,例如插入、更新和刪除等。這種運算方式可以讓我們更能利用Mongo的強大功能,提升我們的開發效率。本文將透過實際案例,介紹Golang中的Mongo中位數運算的使用方法和注意事項,幫助開發人員更能掌握這項技術。
我在 mongo (go) 中有一個集合,其型別是:
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"` }
我需要評估某個使用者(透過他的 user_id
)的最後 5 筆記錄(透過 receivedAt
時間欄位)的評分中位數。
我已經得到了這個:
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})
但我不知道如何獲得這 5 行的評分中位數。我不確定我這樣做的正確方法。求助,謝謝
在$limit
階段之後,自mongodb 版本7.0 以來的一個選項是$group
與 $median
累加器
groupgStage := bson.D{{"$group", bson.D{ {"_id", 0}, {"median", bson.D{{"$median", bson.D{{"$input", "$rating"}, {"method", "approximate"}} }}} }}}
對於舊版本,您可以
$sort
透過 rating
#$group
和 $push
所有 rating
到一個陣列(限制後全部 5 個)$project
陣列中間的項目它看起來像這樣:
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}}} }}}} }}}} }}}}
以上是Golang中的Mongo中位數運算的詳細內容。更多資訊請關注PHP中文網其他相關文章!