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

フィールドパス

項目一覧

  • ユースケース
  • 詳細

入力ドキュメント内のフィールドにアクセスするには、 フィールドパス式を使用します。フィールドパスを指定するには、フィールド名または ドット付きフィールドパス(埋め込みドキュメント内のフィールドの場合)の前にドル記号$ を付けます。

たとえば、次のユースケースではフィールドパスを使用できます。

  • ネストされたフィールド

  • ネストされたフィールドの配列

  • ネストされた配列の配列

次の例では、 Atlas サンプルデータベース の プロファイリングコレクションを使用します。このコレクション内の各ドキュメントの構造は次のとおりです。

{
_id: new ObjectId("6220f6b78a733c51b416c80e"),
name: "Uranus",
orderFromSun: 7,
hasRings: true,
mainAtmosphere: [ "H2", "He", "CH4" ],
surfaceTemperatureC: { min: null, max: null, mean: -197.2 }
}

フィールド内にネストされたフィールドmean surfaceTemperatureC"field.nestedField"を指定するには、ドル記号 を使用したドット表記( )$ を使用します。次の集計パイプラインでは、各ドキュメントのmean ネストされたフィールド値のみがプロジェクションされます。

db.planets.aggregate( [
{
$project: {
nested_field: "$surfaceTemperatureC.mean"
}
}
] )

以下は、返されたドキュメントの例です。

{ _id: ObjectId('6220f6b78a733c51b416c80e'), nested_field: -197.2 }

フィールドパス内のドット表記を使用して、配列内にネストされたフィールドにアクセスできます。

例、instockフィールドを含む productsコレクションを考えてみましょう。 instockフィールドには、ネストされた warehouse フィールドの配列が含まれています。

db.products.insertMany( [
{ item: "journal", instock: [ { warehouse: "A"}, { warehouse: "C" } ] },
{ item: "notebook", instock: [ { warehouse: "C" } ] },
{ item: "paper", instock: [ { warehouse: "A" }, { warehouse: "B" } ] },
{ item: "planner", instock: [ { warehouse: "A" }, { warehouse: "B" } ] },
{ item: "postcard", instock: [ { warehouse: "B" }, { warehouse: "C" } ] }
] )

次の集計パイプラインは $instock.warehouse を使用してネストされた warehouse フィールドにアクセスします。

db.products.aggregate( [
{
$project: {
item: 1,
warehouses: "$instock.warehouse"
}
}
] )

この例では 、$instock.warehouse は、各ドキュメントのネストされた warehouseフィールドにある値の配列を出力します。パイプラインは次のドキュメントを返します。

[
{
_id: ObjectId('6740b55e33b29cf6b1d884f7'),
item: "journal",
warehouses: [ "A", "C" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884f8'),
item: "notebook",
warehouses: [ "C" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884f9'),
item: "paper",
warehouses: [ "A", "B" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884fa'),
item: "planner",
warehouses: [ "A", "B" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884fb'),
item: "postcard",
warehouses: [ "B", "C" ]
}
]

フィールドパスにドル記号$ を含むドット表記を使用して、ネストされた配列内の配列にアクセスすることもできます。

この例では、次のドキュメントを含む fruitsコレクションを使用します。

db.fruits.insertOne(
{
_id: ObjectId("5ba53172ce6fa2fcfc58e0ac"),
inventory: [
{
apples: [
"macintosh",
"golden delicious",
]
},
{
oranges: [
"mandarin",
]
},
{
apples: [
"braeburn",
"honeycrisp",
]
}
]
}
)

コレクション内のドキュメントには inventory 配列が含まれています。配列の各要素は、ネストされた配列フィールドを含むオブジェクトです。

次の集計パイプラインについて考えてみましょう。

db.fruits.aggregate( [
{ $project:
{ all_apples: "$inventory.apples" } }
] )

このパイプラインでは、$inventory.apples はネストされた配列の配列に解決されます。パイプラインは、次のドキュメントを返します。

{
_id: ObjectId('5ba53172ce6fa2fcfc58e0ac'),
all_apples: [
[ "macintosh", "golden delicious" ],
[ "braeburn", "honeycrisp" ]
]
}

ネストされた要素へのアクセスと操作の詳細については、 ドット表記 および 埋め込みドキュメントの配列のクエリ を参照してください。

戻る

Aggregation Pipeline