Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mendapatkan Kiraan Item Berdasarkan Berbilang Nilai Atribut dalam MongoDB menggunakan Agregasi Pipeline?

Bagaimana untuk Mendapatkan Kiraan Item Berdasarkan Berbilang Nilai Atribut dalam MongoDB menggunakan Agregasi Pipeline?

Susan Sarandon
Susan Sarandonasal
2024-10-26 19:20:29459semak imbas

How to Retrieve Item Count Based on Multiple Attribute Values in MongoDB using Aggregation Pipeline?

Dapatkan Senarai Item dengan Menyemak Berbilang Nilai Atribut dalam MongoDB

Apabila bekerja dengan MongoDB, selalunya menjadi perlu untuk mendapatkan semula item tertentu berdasarkan berbilang nilai atribut, serupa dengan keadaan IN yang digunakan dalam MySQL. Artikel ini menunjukkan cara untuk mencapai perkara ini menggunakan gabungan operasi saluran paip dalam MongoDB.

Rangka Kerja Pengagregatan

Dalam senario ini, kami akan menggunakan rangka kerja pengagregatan untuk membina saluran paip yang menapis dan mengagregat data daripada koleksi MongoDB yang dikenali sebagai "venueList." Matlamatnya ialah untuk mendapatkan semula jumlah kiraan pengguna dengan sistem pengendalian tertentu, seperti Linux atau Ubuntu, berdasarkan senarai ID tempat.

Peringkat Saluran Paip

The saluran paip terdiri daripada beberapa peringkat yang bekerjasama untuk mengubah dan meringkaskan data:

  1. $match: Menapis koleksi berdasarkan ID tempat yang ditentukan, memastikan hanya dokumen yang berkaitan dipertimbangkan .
  2. $unwind: Menyahnormalkan tatasusunan "venueList" dan "sum" untuk mencipta dokumen individu bagi setiap tempat dan pengedaran ejen pengguna.
  3. $match: Menapis dokumen dinyahnormal semula untuk memastikan bahawa hanya ID tempat yang dikehendaki disertakan.
  4. $unwind: Selanjutnya menyahnormalkan tatasusunan "jumlah" untuk mencipta dokumen individu bagi setiap pengedaran ejen pengguna .
  5. **$group:** Mengagregatkan dokumen nyahnormal menggunakan operator $cond untuk mencipta medan berasingan bagi setiap sistem pengendalian (cth., "linux" dan "ubuntu"). Operator $sum digunakan untuk mengira jumlah bilangan pengguna bagi setiap sistem pengendalian.

Output Jangkaan

Output akhir saluran paip pengagregatan akan dokumen yang mengandungi jumlah bilangan pengguna Linux dan Ubuntu merentas ID tempat yang ditentukan:

<code class="json">{
  "_id": null,
  "linux": 14,
  "ubuntu": 4
}</code>

Pelaksanaan Go

Untuk menggunakan saluran paip ini dalam Go menggunakan pakej mgo , anda boleh ikut langkah ini:

<code class="go">query := []bson.M{
  {"$match": bson.M{"venueList.id": bson.M{"$in": []string{"VID1212", "VID4343"}}}},
  {"$unwind": "$venueList"},
  {"$match": bson.M{"venueList.id": bson.M{"$in": []string{"VID1212", "VID4343"}}}},
  {"$unwind": "$venueList.sum"},
  {
    "$group": bson.M{
      "_id":        nil,
      "linux":      bson.M{"$sum": bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"$venueList.sum.name", "linux"}}, "$venueList.sum.value", 0}}},
      "ubuntu":     bson.M{"$sum": bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"$venueList.sum.name", "ubuntu"}}, "$venueList.sum.value", 0}}},
    },
  },
}</code>

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kiraan Item Berdasarkan Berbilang Nilai Atribut dalam MongoDB menggunakan Agregasi Pipeline?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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