$isArray (配列かどうかの判定)
最終更新:2026-10-09
$isArray (配列かどうかの判定)
$isArray は、式が配列に解決されるかを表すブール値を返します。$cond 内での型分岐によく使われます。フィールドがスカラーか配列のどちらかを取り得る場合、まず $isArray で判定してから処理経路を選びます。$size や $map のように配列のみを受け付ける演算子をエラーから守るガードとしても機能します。集計式における型ガードであり、$type と組み合わせればより精密な BSON 型チェックも可能です。フィールドが欠落している場合はエラーではなく false を返します。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $isArray: <expression> }
⚙️ パラメータ
| 式 | 結果が配列型かどうかを判定する任意の式。 |
|---|
戻り値:ブール値。結果が配列の場合は true、それ以外は false
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $isArray: タグが文字列でも配列でもカウントする
db.products.aggregate([
{ $project: {
tagCount: { $cond: { if: { $isArray: '$tags' }, then: { $size: '$tags' }, else: 1 } }
} }
])
出力:
{ '_id': 1, 'tagCount': 3 }
{ '_id': 2, 'tagCount': 1 }
📌 注意事項
- フィールドが欠落していてもエラーではなく false を返す
- 入れ子の配列(配列の中の配列)も配列なので true になる
- $cond/$switch と組み合わせて型による分岐に使う。配列以外で $size を呼ばないようにする
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qフィールドが欠落しているときは何を返しますか?
Aエラーを投げずに false を返します。ガードとして安全に使えます。
Q文字列と配列は区別できますか?
Aはい — 文字列は false です。true になるのは BSON の配列型だけです。
Q$cond とどう組み合わせますか?
A$cond の if に $isArray を置き、then/else に 2 つの分岐を書きます。