Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

字段路径

在此页面上

  • 用例
  • 了解详情

您可以使用 字段路径(Field Path)表达式访问权限输入文档中的字段。要指定字段路径(Field Path),请在字段名称或虚线字段路径(Field Path)(如果该字段位于嵌入式文档中)前加上美元符号$

您可以在以下使用案例中使用字段路径:

  • 嵌套字段

  • 嵌套字段数组

  • 嵌套数组的数组

以下示例使用Atlas样本数据库中的planets集合。此集合中的每个文档都具有以下结构:

{
_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 }

您可以在字段路径(Field Path)中使用点表示法来访问权限嵌套在大量中的字段。

示例,考虑一个包含 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" ]
}
]

还可以在字段路径(Field Path)中使用带有美元符号$ 的点表示法来访问权限嵌套大量中的大量。

此示例使用包含以下文档的 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)

在此页面上