$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': [] }

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q$filter と $map の違いは?
A$filter は要素を変更せずに条件で除去します。$map は件数を変えずに各要素を変換します。よく組み合わせて使われます。
Qcond 内の変数はどう参照しますか?
A変数にドル記号を 2 つ付けます。例: { $gt: ['$$it.qty', 0] }。as を省略した場合は $$this を使います。
Qオブジェクトの配列でも使えますか?
Aはい — cond 内で $$variable.field でフィールドにアクセスします。例: '$$it.price'。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%