$size (配列の長さ)
最終更新:2026-10-09
$size (配列の長さ)
$size は、配列フィールドの長さが指定した値とちょうど一致するドキュメントにマッチします。`{ tags: { $size: 3 } }` はタグがちょうど 3 つのドキュメントに一致します。クエリでは $size は厳密な値のみ受け付けるため、{ $size: { $gt: 3 } } とは書けません。範囲条件には集計の $size を使った $expr を使います。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <field>: { $size: <length> } }
⚙️ パラメータ
| フィールド | マッチ対象の配列フィールド。 |
|---|---|
| 長さ | 配列要素の正確な数。 |
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $size: タグがちょうど 3 つの記事
db.articles.find({ tags: { $size: 3 } })
// タグが 3 つ以上($expr が必要)
db.articles.find({ $expr: { $gte: [{ $size: '$tags' }, 3] } })
出力:
// タグがちょうど 3 つの記事を返す。2 つ目は 3 つ以上の記事を返す
📌 注意事項
- クエリでは厳密な等値のみサポート。範囲は不可
- 範囲には $expr と { $size: '$tags' }、比較演算子を組み合わせる
- $size はフィールドが存在しないドキュメントには一致しない
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$size で長さが値より大きいクエリは書けますか?
A直接は書けません。$expr: { $gt: [{ $size: '$tags' }, 3] } を使います。
Q$size はフィールドが存在しないドキュメントに一致しますか?
Aいいえ。フィールドが存在し、配列である必要があります。
Q$size: 0 で空の配列に一致しますか?
Aはい。{ tags: { $size: 0 } } は空の配列に一致します。ただしフィールドが存在しないものは一致しません。