我在 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
阶段之后,一种选择是使用 $group
累加器$median
groupgStage := bson.D{{"$group", bson.D{
{"_id", 0},
{"median", bson.D{{"$median",
bson.D{{"$input", "$rating"}},
bson.D{{"method", "approximate"}}
}}}
}}}