$filter (配列のフィルタリング)
最終更新:2026-10-09
$filter (配列のフィルタリング)
$filter は配列を走査し、条件を満たす要素だけを残した新しい配列を返します。集計式の中で配列をフィルタリングする定番の演算子です。代表的な用途は、注文の出荷済みアイテムだけを取り出す、不正なタグを落とす、スコアが閾値を超えるレビューだけを選ぶなどです。構文は input(入力配列)、as(変数名)、cond(条件式)の 3 つで構成され、cond では $$variable で現在の要素を参照します。要素を除去するだけで変換はしないため、要素も変更したい場合は $map と組み合わせます。null の入力は null を返します。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $filter: { input: <array>, as: <variable>, cond: <condition> } }
⚙️ パラメータ
| input | フィルタリングする配列式。 |
|---|---|
| as | 現在の要素の変数名。cond 内で $$variable として参照します。任意で、既定は $$this。 |
| cond | ブール値に解決される条件式。残す要素を決定します。 |
戻り値:条件を満たす要素からなる新しい配列。入力が null の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $filter: 在庫が 0 より多いアイテムだけを残す
db.orders.aggregate([
{ $project: {
inStock: { $filter: { input: '$items', as: 'it', cond: { $gt: ['$$it.qty', 0] } } }
} }
])
出力:
{ '_id': 1, 'inStock': [ { 'sku': 'A01', 'qty': 2 } ] }
{ '_id': 2, 'inStock': [] }
📌 注意事項
- cond 内では現在の要素を $$ プレフィックス付きで参照する(例: $$it、$$this)
- $filter は要素の除去のみ。変換も行うには $map を組み合わせる
- 条件が null または false の要素は除外される。null の入力は null を返す
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$filter と $map の違いは?
A$filter は要素を変更せずに条件で除去します。$map は件数を変えずに各要素を変換します。よく組み合わせて使われます。
Qcond 内の変数はどう参照しますか?
A変数にドル記号を 2 つ付けます。例: { $gt: ['$$it.qty', 0] }。as を省略した場合は $$this を使います。
Qオブジェクトの配列でも使えますか?
Aはい — cond 内で $$variable.field でフィールドにアクセスします。例: '$$it.price'。