ホームページ >バックエンド開発 >Golang >集約パイプラインを使用してMongoDBの複数の属性値に基づいてアイテム数を取得する方法は?

集約パイプラインを使用してMongoDBの複数の属性値に基づいてアイテム数を取得する方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 19:20:29536ブラウズ

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

MongoDB の複数の属性値を確認して項目リストを取得する

MongoDB を使用する場合、多くの場合、複数の属性値に基づいて特定の項目を取得する必要があります。 MySQL で使用される IN 条件に似た属性値。この記事では、MongoDB でパイプライン操作を組み合わせてこれを実現する方法を説明します。

集計フレームワーク

このシナリオでは、集計フレームワークを使用して、 「venueList」として知られる MongoDB コレクションからのデータをフィルター処理して集約するパイプライン。目標は、会場 ID のリストに基づいて、Linux や Ubuntu などの特定のオペレーティング システムを使用するユーザーの合計数を取得することです。

パイプライン ステージ

パイプラインは、データの変換と要約を行うために連携するいくつかのステージで構成されます。

  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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。