首頁 > 後端開發 > Golang > 如何使用聚合管道在 MongoDB 中基於多個屬性值檢索項目計數?

如何使用聚合管道在 MongoDB 中基於多個屬性值檢索項目計數?

Susan Sarandon
發布: 2024-10-26 19:20:29
原創
532 人瀏覽過

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

透過檢查MongoDB 中的多個屬性值來擷取項目清單

使用MongoDB 時,經常需要根據多個屬性值來擷取特定項目屬性值,類似MySQL中使用的IN條件。本文示範如何使用 MongoDB 中的管道操作組合來實現此目的。

聚合框架

在這個場景中,我們將使用聚合框架建立一個用於過濾和聚合來自MongoDB 集合(稱為「venueList」)的資料的管道。目標是根據場地 ID 清單檢索使用特定作業系統(例如 Linux 或 Ubuntu)的使用者總數。

管道階段

The管道由多個階段組成,這些階段協同工作來轉換和匯總數據:

  1. $match: 根據指定的場地ID 過濾集合,確保僅考慮相關文件.
  2. $unwind: 非規範化「venueList」和「sum」數組,為每個場地和用戶代理分發創建單獨的文檔。
  3. $match: 再次過濾非規範化文檔,以確保僅包含所需的場地 ID。
  4. $unwind: 進一步對「sum」陣列進行非規範化,為每個使用者代理分發建立單獨的文件.
  5. **$group:** 使用$cond 運算子聚合非規範化文檔,為每個作業系統(例如「linux」和「ubuntu」)建立單獨的欄位。 $sum 運算子用於計算每個作業系統的使用者總數。

預期輸出

聚合管道的最終輸出將是包含指定場地ID 上的Linux 和Ubuntu 用戶總數的文件:

<code class="json">{
  "_id": null,
  "linux": 14,
  "ubuntu": 4
}</code>
登入後複製

Go 實作

使用mgo 套件在Go 中使用此管道,您可以按照以下步驟操作:

<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>
登入後複製

以上是如何使用聚合管道在 MongoDB 中基於多個屬性值檢索項目計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板