AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

db.コレクション. distinct()(mongoshメソッド)

MongoDB とドライバー

このページでは、mongosh メソッドのドキュメントについて記載しています。MongoDB ドライバーで同等のメソッドを確認するには、ご使用のプログラミング言語の対応するページを参照してください。
db.collection.distinct(field, query, options)

1 つのコレクションまたはビューから指定されたフィールドの個別の値を検索し、一意の結果を配列で返します。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

注意

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

このメソッドでは、次のパラメーターが使われます。

Parameter
タイプ
説明

field

string

個別の値を返すフィールド。

query

ドキュメント

個別の値を取得するドキュメントを指定するクエリ。

options

ドキュメント

Optional. A document that specifies the options. See Options.

注意

結果は BSON サイズの最大を超えることはできません。結果が BSON サイズの最大を超える場合は、「集計パイプラインを使用した個別の値の取得」で説明されているように、$group 演算子を使用して集計パイプラインで個別の値を取得します。

次の図は、distinct() 呼び出しの例を示しています。

注釈付きの個別の操作の図。
{ collation: <document> }
フィールド
タイプ
説明

collation

ドキュメント

任意。

任意。操作に使用する照合を指定します。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

照合オプションの構文は次のとおりです。

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。

照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合(db.createCollection() を参照)には、コレクションの照合が使用されます。

コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。

1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。

シャーディングされたクラスターでは、 distinctコマンドによって孤立したドキュメントが返される場合があります。

時系列コレクションの場合、distinct コマンドはインデックスを効率的に使用できません。代わりに、$group 集計を使用して、ドキュメントを個別の値でグループ化します。詳細は「時系列の制限」をご覧ください。

If the value of the specified field is an array, db.collection.distinct() considers each element of the array as a separate value.

For instance, if a field has as its value [ 1, [1], 1 ], then db.collection.distinct() considers 1, [1], and 1 as separate values.

For an example, see Return Distinct Values for an Array Field.

When possible, db.collection.distinct() operations can use indexes.

Indexes can also cover db.collection.distinct() operations. See Run Covered Queries for more information on queries covered by indexes.

トランザクション内で個別の操作を実行するには、以下を使用できます。

  • For unsharded collections, you can use the db.collection.distinct() method/the distinct command as well as the aggregation pipeline with the $group stage.

  • For sharded collections, you cannot use the db.collection.distinct() method or the distinct command.

    シャーディングされたコレクションの個別の値を検索するには、代わりに $group ステージで集計パイプラインを使用します。詳細については、「個別の操作」を参照してください。

重要

ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。

トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。

distinct() を発行したクライアントが操作が完了する前に切断された場合、 MongoDB はkillOp を使用して distinct() を終了としてマークします。

レプリカセット ノードでdistinct操作を実行するには、ノードがPRIMARYまたはSECONDARY状態である必要があります。 ノードがSTARTUP2などの別の状態にある場合、操作はエラーになります。

バージョン8.0の新機能。

クエリ設定を使用して、インデックスヒント、操作拒否フィルター、その他のフィールドを設定できます。設定はクラスター全体のクエリシェイプに適用されます。クラスターは、シャットダウン後も設定を保持します。

クエリオプティマイザは、クエリプランニング中の追加入力としてクエリ設定を使用します。これは、クエリを実行するために選択されたプランに影響します。クエリ設定を使用してクエリシェイプをブロックすることもできます。

クエリ設定を追加して例を調べるには、setQuerySettings を参照してください。

find、distinct、aggregate コマンドのクエリ設定を追加できます。

クエリ設定にはより多くの機能があり、廃止されたインデックスフィルターよりも優先されます。

クエリ設定を削除するには、 removeQuerySettingsを使用します。 クエリ設定を取得するには、集計パイプラインの$querySettingsステージを使用します。

次の例えでは、sample_mflix データベースの movies コレクションを使用します。

次の例では、typeフィールドの個別の値を返します。

db.movies.distinct( "type" )
[ 'movie', 'series' ]

次の例では、埋め込まれた imdb.ratingフィールドの個別の値を返します。

db.movies.distinct( "imdb.rating", { title: { $regex: /^Toy Story/ } } )
[ 7.3, 7.6, 7.9, 8.3, 8.4 ]

Tip

埋め込みドキュメント内のフィールドへのアクセスに関する情報は、ドット表記 を参照してください。

次の例では、genres 配列フィールドの個別の値を返します。

db.movies.distinct( "genres", { rated: "G", year: { $gt: 2010 } } )
[
'Adventure',
'Animation',
'Comedy',
'Documentary',
'Drama',
'Family',
'Fantasy',
'Music',
'Romance',
'Short',
'Sport'
]

For information on distinct() and array fields, see the Behavior section.

次の例では、year が 2000 に等しい rated フィールドの個別の値を返します。

db.movies.distinct( "rated", { year: 2000 } )
[ 'G', 'PG', 'PG-13', 'R', 'TV-14', 'TV-G', 'TV-PG' ]

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

コレクション movieTitlesDemoは、次のドキュメントを含みます。

db.movieTitlesDemo.insertMany( [
{ _id: 1, title: "café", status: "A" },
{ _id: 2, title: "cafe", status: "a" },
{ _id: 3, title: "cafE", status: "a" }
] )

次の操作にはMongoDB 照合オプションが含まれます。

db.movieTitlesDemo.distinct( "title", {}, { collation: { locale: "fr", strength: 1 } } )
[ 'café' ]

照合フィールドの説明については、照合ドキュメントを参照してください。