Operasi median Mongo di Golang

PHPz
Lepaskan: 2024-02-08 23:33:08
ke hadapan
876 orang telah melayarinya

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"`
}
Salin selepas log masuk

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})
Salin selepas log masuk

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"}}
  }}}
}}}
Salin selepas log masuk

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}}}
    }}}}
  }}}}
}}}}
Salin selepas log masuk

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

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!