我在 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"`
}
receivedAt
我需要评估某个用户(按他的)的最后 5 条记录(按时间字段)的评分中值user_id
。我已经得到了这个:
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
累加器对于旧版本,您可以
$sort
经过rating
$group
并将$push
所有rating
s 放入一个数组(限制后全部 5 个)$project
数组中间的项它看起来像这样: