定義
グループ内のドキュメント全体で評価された式の一意の値の配列を返します。配列内の要素の順序は指定されていません。
$addToSet は、次のステージで使用できます。
注意
曖昧さ回避
このページでは、アキュムレータとして使用する場合の$addToSet について説明します。アキュムレータは、入力ドキュメントのグループ全体の合計、最大、または最小などの単一の集計値を返します。
次の他のコンテキストでは $addToSet を使用することもできます。
$addToSet (window function)$setWindowFieldsは、特定のウィンドウ内のドキュメントから一意の値の配列を返すために ステージで使用されます。$addToSet (update operator)は、ドキュメント内の配列フィールドに一意の要素を追加します。
構文
{ $addToSet: <expression> }
式の詳細については、「式 」を参照してください。
動作
式の値が配列の場合、$addToSet は配列全体を 単一の 要素として追加します。
式の値がドキュメントの場合、その配列内の別のドキュメントが、これから追加されるドキュメントと完全に一致すれば、MongoDB ではそのドキュメントが重複していると判断されます。具体的には、既存のドキュメントにまったく同じフィールドと値がまったく同じ順序で含まれている場合です。
例
このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
次の操作では、映画を役員ごとにグループ化し、$addToSetアキュムレータを使用して各役員が所属する一意のジャンルを収集します。読みやすくするために、パイプラインは結果をアルファベット順の最初の 5 つの監督に制限します。
db.movies.aggregate( [ { $unwind: "$directors" }, { $unwind: "$genres" }, { $group: { _id: "$directors", genres: { $addToSet: "$genres" } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
このパイプラインは、次の結果を返します。
[ { _id: 'A. Dean Bell', genres: [ 'Crime', 'Drama' ] }, { _id: 'A. Karunakaran', genres: [ 'Romance' ] }, { _id: 'A. Vanichkin', genres: [ 'Animation', 'Fantasy' ] }, { _id: 'A.J. Edwards', genres: [ 'Biography', 'Drama', 'History' ] }, { _id: 'A.R. Murugadoss', genres: [ 'Drama', 'Sci-Fi', 'Thriller', 'Action', 'Mystery' ] } ]