distinct() (重複のない値)
最終更新:2026-10-09
distinct() (重複のない値)
distinct() はコレクション内の指定フィールドのすべての一意な値を返します。例: `db.users.distinct('address.city')`。完全なドキュメントではなく、重複を除いた値の配列を返すため、カテゴリや利用可能な値の列挙に便利です。インデックスの無い大規模フィールドで distinct を実行すると遅くなる可能性があり、結果は 16MB の BSON 上限に制限されることに注意してください。
| カテゴリ | 読み取り |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.distinct(<field>, <filter>)
⚙️ パラメータ
| フィールド | 重複を排除するフィールド名。'address.city' のようなドット記法も使用できます。 |
|---|---|
| フィルター条件 | 任意。値を収集する前にドキュメントを絞り込みます。 |
戻り値:異なる値の配列。何もマッチしない場合は空。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// distinct: 成人ユーザーの都市をすべて列挙する
const cities = db.users.distinct(
'address.city',
{ age: { $gt: 18 } }
)
cities
出力:
[ 'Beijing', 'Shanghai', 'Guangzhou' ]
📌 注意事項
- 値の配列を返す(件数ではない)。数えるには .length を使う
- ネストしたフィールドは 'address.city' のようなドットパスを使う
- 結果は 16MB に制限される。巨大なデータセットにはアグリゲーションパイプラインを使う
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qdistinct とアグリゲーションの $group による重複排除はどう違いますか?
Adistinct() は一意な値の単純な配列を返します。$group はカウントや合計など、より豊かな集計もできます。
Qdistinct はネストしたフィールドに使えますか?
A使えます。ドットパスを使います。例: db.users.distinct('address.city')
Q結果が巨大だと distinct は失敗しますか?
A結果が 16MB の BSON 上限を超えるとエラーになります。非常に大きな結果には $group パイプラインに切り替えてください。