MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで2つの配列の共通部分(積集合)を取得する方法【$setIntersection演算子の使い方】

MongoDBで配列の共通部分を取得するには

MongoDBにおいて、2つの配列の共通部分(積集合)を取得したい場合は、集計フレームワーク(aggregate()メソッド)と組み合わせて$setIntersection演算子を使用します。

$setIntersectionは、指定した複数の配列を受け取り、それらすべてに含まれる要素のみを返すセット演算子です。重複する要素は自動的に除外され、結果はユニークな値のリストになります。

1. サンプルコレクションの作成

まず、ドキュメントを含むコレクションを作成します。ここでは「demo61」というコレクションに、2つの配列フィールドを持つドキュメントを挿入します。

> db.demo61.insertOne({"Values1":[10,20,30,40,50],"Values2":[30,100,70,120,40]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e286e28cfb11e5c34d8992a")
}

2. ドキュメントの確認

find()メソッドを使って、コレクション内のすべてのドキュメントを表示して確認しましょう。

> db.demo61.find().pretty();

このクエリを実行すると、次のような出力が得られます。

{
   "_id" : ObjectId("5e286e28cfb11e5c34d8992a"),
   "Values1" : [
      10,
      20,
      30,
      40,
      50
   ],
   "Values2" : [
      30,
      100,
      70,
      120,
      40
   ]
}

この例では、「Values1」と「Values2」の両方に含まれている値は「30」と「40」であることが確認できます。

3. $setIntersectionで共通部分を取得するクエリ

以下が、MongoDBで2つの配列の共通部分を取得するためのクエリです。$projectステージ内で$setIntersectionを使用し、両方の配列を引数として渡します。

> db.demo61.aggregate(
...    [
...       { $project: { BothValues:{ $setIntersection: [ "$Values1", "$Values2" ] }} }
...    ]
... );

4. 実行結果

上記のクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e286e28cfb11e5c34d8992a"), "BothValues" : [ 30, 40 ] }

出力を見ると、「BothValues」フィールドに「[30, 40]」という結果が格納されています。これはまさに2つの配列「Values1」と「Values2」の共通部分です。

まとめ

MongoDBで2つの配列の共通部分を取得するには、aggregate()メソッドと$setIntersection演算子を組み合わせるのが最も簡単な方法です。$setIntersectionは以下のような特徴を持っています。

  • 引数には2つ以上の配列を指定可能
  • 重複する要素は結果から除外される
  • 要素の順序は保証されない場合がある

なお、配列ではなくセット操作を行う他の演算子としては、和集合を取得する$setUnionや、差集合を取得する$setDifferenceなどもあります。用途に応じて使い分けるとよいでしょう。

  1. C#で2つの配列の共通要素(積集合)を取得する方法【Intersectメソッド】

    C#で2つの配列の共通要素(交差・積集合)を取得するには、Intersectメソッドを使用します。このメソッドは、System.Linq名前空間に用意されている拡張メソッドで、LINQを使った配列操作の中でも特に便利な機能の一つです。 Intersectメソッドは、2つの配列を比較し、両方に存在する共通の要素だけを返します。重複する要素は自動的に除外され、結果は一意な値のコレクションとして取得できます。 配列の準備 まず、比較対象となる2つの整数型の配列を定義します。 int[] arr1 = { 44, 76, 98, 34 }; int[] arr2 = { 24, 98, 44, 55,

  2. 2つのNumPy配列の共通要素(積集合)を求める方法

    この記事では、2つのNumPy配列の共通部分(積集合)を求める方法を解説します。2つの配列の「共通部分」とは、元の両方の配列に共通して含まれる要素だけを集めた配列のことです。NumPyにはこの目的に特化した np.intersect1d() 関数が用意されており、わずか1行のコードで共通要素を抽出できます。アルゴリズム処理の手順は以下の通りです。NumPyをインポートします。2つのNumPy配列を定義します。np.intersect1d() 関数を使って、配列同士の共通部分を求めます。共通する要素からなる配列を出力します。サンプルコードimport numpy as np array_1 =