Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Operasi median Mongo di Golang

Operasi median Mongo di Golang

PHPz
PHPzke hadapan
2024-02-08 23:33:08855semak imbas

Operasi median Mongo di Golang

Operasi median Mongo di Golang ialah teknologi penting yang mempunyai kepentingan yang besar untuk pembangun. Ia membolehkan kami menjadi lebih fleksibel dan cekap apabila berurusan dengan pangkalan data Mongo. Di Golang, kami boleh menggunakan operasi median Mongo untuk melaksanakan pelbagai operasi data, seperti sisipan, kemas kini dan pemadaman. Kaedah pengkomputeran ini membolehkan kami menggunakan fungsi berkuasa Mongo dengan lebih baik dan meningkatkan kecekapan pembangunan kami. Artikel ini akan memperkenalkan penggunaan dan langkah berjaga-jaga bagi operasi median Mongo di Golang melalui kes praktikal untuk membantu pembangun menguasai teknologi ini dengan lebih baik.

Isi soalan

Saya ada koleksi di mongo (go) yang jenisnya:

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

Saya perlu menilai rating median pengguna tertentu (melalui user_id)的最后 5 条记录(通过 receivedAt medan masanya). Saya ada ini:

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

Tetapi saya tidak tahu bagaimana untuk mendapatkan rating median bagi 5 baris ini. Saya tidak pasti cara yang betul untuk saya melakukan ini. Bantuan, terima kasih

Penyelesaian

Dalam $limit 阶段之后,自 mongodb 版本 7.0 以来的一个选项是 $group$median Accumulator

groupgStage := bson.D{{"$group", bson.D{
  {"_id", 0}, 
  {"median", bson.D{{"$median", 
    bson.D{{"$input", "$rating"}, {"method", "approximate"}}
  }}}
}}}

Untuk versi lama boleh

  1. $sort 通过 rating
  2. $group$push 所有 rating kepada tatasusunan (semua 5 selepas had)
  3. $project Item di tengah array

Ia kelihatan seperti ini:

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

Atas ialah kandungan terperinci Operasi median Mongo di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam