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

$getField(集計)

項目一覧

  • 定義
  • 構文
  • 動作
$getField

バージョン 5.0 で追加

ドキュメントから指定したフィールドの値を返します。 オブジェクトを指定しない場合、 $getField $$CURRENTからフィールドの値を返します。

$getFieldを使用すると、名前にピリオド( . )が含まれるフィールドやドル記号( $ )で始まるフィールドの値を取得できます。

Tip

名前にドル記号($)またはピリオド(.)が含まれるフィールドを追加または更新するには、$setField を使用します。

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

{
$getField: {
field: <String>,
input: <Object>
}
}
フィールド
タイプ
説明
field
文字列

値を返す対象であるinputオブジェクト内のフィールド。 fieldは、string に変換される任意の有効なにすることができます。

fieldがドル記号( $ )で始まる場合は、フィールド名を$literalまたは$toString式の中に配置して、その値を返します。

input
オブジェクト

デフォルト: $$CURRENT

値を返す対象である field を含む有効なinput は、オブジェクト missingnull、またはundefined に変換される必要があります。省略した場合、パイプラインで現在処理中のドキュメント($$CURRENT)がデフォルトになります。

$getFieldには、 $$CURRENTからフィールド値を取得するための次の短縮構文があります。

{
$getField: <String>
}

この構文では、引数は上記の field の値と同じになります。

  • 指定した fieldinput オブジェクトにない場合、または input オブジェクトを指定していない場合は、$$CURRENT にない場合、$getFieldmissing を返します。

  • inputmissingundefined、または null と評価された場合、$getFieldnull を返します。

  • inputがオブジェクト以外のオブジェクト( missingundefined 、またはnull )以外と評価された場合、 $getFieldはエラーを返します。

  • $getField は、オブジェクトまたは配列を暗黙的にトラバースすることはありません。たとえば、$getField は、a.b.cfield 値を、ネストされたフィールド { a: { b: { c: } } } ではなく、最上位フィールド a.b.c として評価します。

Tip

以下も参照してください。

以下のドキュメントを持つinventoryコレクションを検討してください。

{ "_id" : 1, "item" : "sweatshirt", "price.usd": 45.99, qty: 300 }
{ "_id" : 2, "item" : "winter coat", "price.usd": 499.99, qty: 200 }
{ "_id" : 3, "item" : "sun dress", "price.usd": 199.99, qty: 250 }
{ "_id" : 4, "item" : "leather boots", "price.usd": 249.99, qty: 300 }
{ "_id" : 5, "item" : "bow tie", "price.usd": 9.99, qty: 180 }

次の操作では、 $getField演算子と$gt演算子を使用して、 price.usd200より大きい製品を見つけます。

db.inventory.aggregate( [
{
$match:
{ $expr:
{ $gt: [ { $getField: "price.usd" }, 200 ] }
}
}
] )

この操作は次の結果を返します。

[
{ _id: 2, item: 'winter coat', qty: 200, 'price.usd': 499.99 },
{ _id: 4, item: 'leather boots', qty: 300, 'price.usd': 249.99 }
]

以下のドキュメントを持つinventoryコレクションを検討してください。

{ "_id" : 1, "item" : "sweatshirt", "$price": 45.99, qty: 300 }
{ "_id" : 2, "item" : "winter coat", "$price": 499.99, qty: 200 }
{ "_id" : 3, "item" : "sun dress", "$price": 199.99, qty: 250 }
{ "_id" : 4, "item" : "leather boots", "$price": 249.99, qty: 300 }
{ "_id" : 5, "item" : "bow tie", "$price": 9.99, qty: 180 }

次の操作では、 $getField$gt 、および$literal演算子を使用して、 $price200より大きい製品を見つけます。

db.inventory.aggregate( [
{
$match:
{ $expr:
{ $gt: [ { $getField: {$literal: "$price" } }, 200 ] }
}
}
] )

この操作は次の結果を返します。

[
{ _id: 2, item: 'winter coat', qty: 200, '$price': 499.99 },
{ _id: 4, item: 'leather boots', qty: 300, '$price': 249.99 }
]

次のドキュメントを使用して inventory コレクションを作成します。

db.inventory.insertMany( [
{ "_id" : 1, "item" : "sweatshirt", "price.usd": 45.99,
"quantity": { "$large": 50, "$medium": 50, "$small": 25 }
},
{ "_id" : 2, "item" : "winter coat", "price.usd": 499.99,
"quantity": { "$large": 35, "$medium": 35, "$small": 35 }
},
{ "_id" : 3, "item" : "sun dress", "price.usd": 199.99,
"quantity": { "$large": 45, "$medium": 40, "$small": 5 }
},
{ "_id" : 4, "item" : "leather boots", "price.usd": 249.99,
"quantity": { "$large": 20, "$medium": 30, "$small": 40 }
},
{ "_id" : 5, "item" : "bow tie", "price.usd": 9.99,
"quantity": { "$large": 0, "$medium": 10, "$small": 75 }
}
] )

次の操作は、$small アイテムの数が 20 以下であるドキュメントを返します。

db.inventory.aggregate( [
{ $match:
{ $expr:
{ $lte:
[
{ $getField:
{ field: { $literal: "$small" },
input: "$quantity"
}
},
20
]
}
}
}
] )

次の演算子を使用して、コレクションをクエリします。

  • $lte 演算子は、20 以下の値を検索します。

  • $getFieldには明示的なfield input$smallパラメーターと パラメーターが必要です。 フィールドはサブドキュメントの一部であるためです。

  • $getField$literalを使用して " $small " を評価します。フィールド名にドル記号( $ )が含まれているためです。

出力例:

[
{
_id: 3,
item: 'sun dress',
'price.usd': 199.99,
quantity: { '$large': 45, '$medium': 40, '$small': 5 }
}
]

戻る

$function