首頁 > 後端開發 > Golang > 主體

如何使用 Go 在 MongoDB 中選擇特定場所 ID 來檢索所有 Linux 使用者的計數?

Linda Hamilton
發布: 2024-10-26 02:27:02
原創
549 人瀏覽過

How can I Retrieve the Count of All Linux Users by Selecting Specific Venue IDs in MongoDB using Go?

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

問題:

透過辨識🎜>問題:

<code class="sql">SELECT * FROM venuelist WHERE venueid IN (venueid1, venueid2)</code>
登入後複製

透過辨識🎜>問題:

<code class="json">{
  "_id" : ObjectId("57f940c4932a00aba387b0b0"),
  "tenantID" : 1,
  "date" : "2016-10-09 00:23:56",
  "venueList" : [
    {
      "id" : "VID1212",
      "sum" : [
        {
          "name" : "linux",
          "value" : 12
        },
        {
          "name" : "ubuntu",
          "value" : 4
        }
      ],
      "ssidList" : [
        {
          "id" : "SSID1212",
          "sum" : [
            {
              "name" : "linux",
              "value" : 8
            },
            {
              "name" : "ubuntu",
              "value" : 6
            }
          ],
          "macList" : [
            {
              "id" : "12:12:12:12:12:12",
              "sum" : [
                {
                  "name" : "linux",
                  "value" : 12
                },
                {
                  "name" : "ubuntu",
                  "value" : 1
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "id" : "VID4343",
      "sum" : [
        {
          "name" : "linux",
          "value" : 2
        }
      ],
      "ssidList" : [
        {
          "id" : "SSID4343",
          "sum" : [
            {
              "name" : "linux",
              "value" : 2
            }
          ],
          "macList" : [
            {
              "id" : "43:43:43:43:43:34",
              "sum" : [
                {
                  "name" : "linux",
                  "value" : 2
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}</code>
登入後複製

透過辨識🎜>透過識別多個來檢索所選項目MongoDB 中的條件,類似於MySQL 中的IN 條件:

考慮JSON 結構:

    任務:透過選擇場地ID 'VID1212檢索所有Linux 使用者的計數' 和'VID4343'。
  1. 解決方案:
  2. 使用聚合框架使用 $match 根據venueList ID 過濾文件。 使用
  3. $unwind
  4. 展開 venueList
  5. sum
  6. 子文檔數組。 使用
  7. $match 取得所需的 ID。
  8. 使用 $group** 聚合過濾後的文檔,使用 **$sum
  9. 累加器取得所需的值。
<code class="go">// Import the necessary packages.
import (
    "context"
    "fmt"

    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/bson/primitive"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

// retrieveItemListByAttributeValues retrieves items based on multiple attribute values in MongoDB.
func retrieveItemListByAttributeValues(client *mongo.Client) {
    // Create a new context.
    ctx := context.Background()

    // Define the pipeline.
    pipeline := mongo.Pipeline{
        {{"$match", bson.D{{"venueList.id", bson.D{{"$in", bson.A{"VID1212", "VID4343"}}}}}}},
        {{"$unwind", "$venueList"}},
        {{"$match", bson.D{{"venueList.id", bson.D{{"$in", bson.A{"VID1212", "VID4343"}}}}}}},
        {{"$unwind", "$venueList.sum"}},
        {
            {"$group", bson.D{
                {"_id", nil},
                {"linux", bson.D{{"$sum", bson.M{"$cond", bson.A{bson.VC.Bool(true), "$venueList.sum.value", 0}}}}}},
                {"ubuntu", bson.D{{"$sum", bson.M{"$cond", bson.A{bson.VC.Bool(true), "$venueList.sum.value", 0}}}}}},
            }},
        },
    }

    // Execute the aggregation pipeline.
    aggRes, err := client.Database("test").Collection("venuelist").Aggregate(ctx, pipeline)
    if err != nil {
        panic(err)
    }

    // Iterate over the results.
    for aggRes.Next(ctx) {
        var result bson.M
        if err := aggRes.Decode(&result); err != nil {
            panic(err)
        }

        // Print the result.
        fmt.Println(result)
    }

    // Close the cursor.
    if err := aggRes.Close(ctx); err != nil {
        panic(err)
    }
}</code>
登入後複製
使用三元運算子的條件 (

$cond) 建立獨立的計數欄位。

<code class="go">pipeline := mongo.Pipeline{
    {{"$match", bson.D{{"venueList.id", bson.D{{"$in", bson.A{"VID1212", "VID4343"}}}}}}},
    {{"$unwind", "$venueList"}},
    {{"$match", bson.D{{"venueList.id", bson.D{{"$in", bson.A{"VID1212", "VID4343"}}}}}}},
    {{"$unwind", "$venueList.sum"}},
    {
        {"$group", bson.D{
            {"_id", "$venueList.sum.name"},
            {"count", bson.D{{"$sum", "$venueList.sum.value"}}},
        }},
    },
    {
        {"$group", bson.D{
            {"_id", nil},
            {"counts", bson.D{{"$push", bson.D{
                {"name", "$_id"},
                {"count", "$count"},
            }}}},
        }},
    },
}</code>
登入後複製
替代解決方案:為了提高效能和靈活性,請考慮以下內容替代管道:

以上是如何使用 Go 在 MongoDB 中選擇特定場所 ID 來檢索所有 Linux 使用者的計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!