Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$filter(集計)

項目一覧

  • 定義
  • 互換性
  • 構文
  • 動作
$filter

バージョン 3.2 で追加

指定条件に基づいて、配列のサブセットを選択して返します。条件に一致する要素のみを含む配列を返します。返される要素は元の順序のままです。

次の環境でホストされる配置には $filter を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

$filter の構文は次のとおりです。

{
$filter:
{
input: <array>,
cond: <expression>,
as: <string>,
limit: <number expression>
}
}
フィールド
仕様

input

配列に解決される

inputnull に解決されるか、欠落しているフィールドを参照する場合、$filternull を返します。

input が配列以外、null 以外の値に解決される場合、パイプラインはエラーになります。

cond

は、ブール値に解決され、要素が出力配列に含まれるべきかどうかを判断するために使用されます。この式は、input 配列の各要素を、as で指定された変数名で個別に参照します。

as

任意。input 配列の各要素を表す変数の名前。名前が指定されていない場合、変数名はデフォルトで this になります。

limit

任意。 $filterが返す一致する配列要素の数を制限する数値式。 未満の制限は指定できません。一致する配列要素は、入力配列に現れる順序で返されます。1

指定されたlimit が一致する配列要素の数より大きい場合、$filter は一致するすべての配列要素を返します。制限がnull の場合、$filter は一致するすべての配列要素を返します。

式の詳細については、「式 」を参照してください。

結果
{
$filter: {
input: [ 1, "a", 2, null, 3.1, NumberLong(4), "5" ],
as: "num",
cond: { $and: [
{ $gte: [ "$$num", NumberLong("-9223372036854775807") ] },
{ $lte: [ "$$num", NumberLong("9223372036854775807") ] }
] }
}
}

[ 1, 2, 3.1, NumberLong(4) ]

コレクション salesは、次のドキュメントを含みます。

{
_id: 0,
items: [
{ item_id: 43, quantity: 2, price: 10 },
{ item_id: 2, quantity: 1, price: 240 }
]
}
{
_id: 1,
items: [
{ item_id: 23, quantity: 3, price: 110 },
{ item_id: 103, quantity: 4, price: 5 },
{ item_id: 38, quantity: 1, price: 300 }
]
}
{
_id: 2,
items: [
{ item_id: 4, quantity: 1, price: 23 }
]
}

次の例では、items 配列をフィルタリングして、price100 以上のドキュメントのみを含めます。

db.sales.aggregate([
{
$project: {
items: {
$filter: {
input: "$items",
as: "item",
cond: { $gte: [ "$$item.price", 100 ] }
}
}
}
}
])

この操作では、次の結果が得られます。

{
"_id" : 0,
"items" : [
{ "item_id" : 2, "quantity" : 1, "price" : 240 }
]
}
{
"_id" : 1,
"items" : [
{ "item_id" : 23, "quantity" : 3, "price" : 110 },
{ "item_id" : 38, "quantity" : 1, "price" : 300 }
]
}
{ "_id" : 2, "items" : [ ] }

戻る

$expMovalingAvg