Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

使用 Atlas SQL 语句进行查询

在此页面上

  • 示例查询
  • SELECT 声明
  • LIMIT 声明
  • WHERE 语句
  • 展平和展开
  • 展平
  • 展平示例
  • Unwind
  • 展开示例
  • FLATTEN 和 UNWIND 组合示例

本页面提供了 Atlas SQL 查询示例。 您将找到使用 SQL 语法查询集合的基本示例,以及使用 FLATTENUNWIND处理嵌套数据的更高级示例。

尝试对高级配置示例联合数据库实例运行以下Atlas SQL查询,或对其进行修改以读取您自己的数据。

注意

这些示例使用短格式语法。

SELECT * FROM sessions;

Atlas SQL 会返回 Sessions 集合中的所有文档。

SELECT * FROM users LIMIT 2;

Atlas SQL 会返回 Users 集合中的两个文档。

SELECT * FROM users WHERE name = 'Jon Snow';

Atlas SQL 可返回 Users 集合中用户 name Jon Snow 为以下名称的文档。

本节介绍两个 Atlas SQL 功能,它们可让与文档结构的交互变得更容易。这些是 Atlas SQL 所独有的。

FLATTEN 会将半结构化数据(JSON 中的名称-值对)展平为单独的列。字段名变成列名,在行中存储该字段的所有值。

展平嵌套文档的语法是一个 FLATTEN 函数,该函数可以在 FROM 子句中与数据源和选项结合使用。

SELECT *
FROM FLATTEN(<data source>
WITH DEPTH => <integer>,
SEPARATOR => <string>
)
变量
必要性
说明

<data source>

必需

要展平的数据源。

DEPTH

Optional

表示要展平的子文档层数的正整数。默认为展平每个层级的子文档。

SEPARATOR

Optional

在连接字段名时用作分隔符的字符串。默认值为 _

在一个示例场景中,一个 customerInfo 集合包含了采用如下结构的文档:

{
id: 1,
location: "New York",
customer: {
age: 50,
email: "customer@email.com",
satisfaction: 5
}
}

如果运行查询 SELECT * FROM customerInfo,Atlas SQL 会返回包含以下顶级字段的文档:

id

1

location

"New York"

customer

{ age: 50, 电子邮件: "customer@email.com",statusment: 5 }

如果运行查询 SELECT * FROM FLATTEN(customerInfo),Atlas SQL 会返回包含以下顶级字段的文档:

id

1

location

"New York"

customer_age

50

customer_email

"customer@email.com"

customer_satisfaction

5

当您使用 FLATTEN 时,原始文档中的每个扁平化字段都会成为结果集中的顶级字段。嵌套字段与其父字段名称连接并使用默认分隔符 _ 分隔。

UNWIND 从输入数据源解构数组字段,为该数组中的每个项目输出一行。 要了解有关展开的更多信息,请参阅 $unwind聚合阶段文档。

展开数组字段的语法是一个UNWIND 函数,该函数可以在FROM 子句中与数据源和选项结合使用。

SELECT *
FROM UNWIND(<data source>
WITH PATH => <array_path>,
INDEX => <identifier>,
OUTER => <bool>
)
变量
必要性
说明

<data source>

必需

待展开数组字段的源。

PATH

必需

指向数据源中待展开字段的路径。

INDEX

Optional

为索引列指定的名称。如果省略,Atlas SQL 将不会建索引字段。

OUTER

Optional

指示是否保留具有空值、缺失值或空数组值的文档的标记。如果为 true,则保留具有空值、缺失值或空数组值的文档。默认为 false

在一个示例场景中,一个 customerInfo 集合包含了采用如下结构的文档:

{
id: 1,
location: "New York",
customer: {
age: 50,
email: "customer@email.com",
satisfaction: 5
},
visits: [
{
year: 2020,
score: 10
},
{
year: 2021,
score: 8
},
{
year: 2022
score: 7
}
]
}

如果运行查询 SELECT * FROM customerInfo,Atlas SQL 会返回包含以下顶级字段的文档:

id

1

location

"New York"

customer

{ age: 50, 电子邮件: "customer@email.com",statusment: 5 }

visits

[ { 年份:2020,得分:10 }, { 年份:2021,得分:8 }, { 年份:2022,得分:7 } ]

如果运行查询 SELECT * FROM UNWIND(customerInfo WITH PATH => visits, INDEX => idx),Atlas SQL 会返回包含以下顶级字段的文档:

id

1

1

1

location

"New York"

"New York"

"New York"

customer

{ age: 50, 电子邮件: "customer@email.com",statusment: 5 }

{ age: 50, 电子邮件: "customer@email.com",statusment: 5 }

{ age: 50, 电子邮件: "customer@email.com",statusment: 5 }

idx

0

1

2

visits

{ year: 2020, score: 10 }

{ year: 2021, score: 8 }

{ year: 2022, score: 7 }

当您将 UNWINDPATH => visits 一起使用时,每个 visits 对象都会成为一个表格行。

以下示例结合了 FLATTENUNWIND 函数。

在一个示例场景中,一个 customerInfo 集合包含了采用如下结构的文档:

{
id: 1,
location: "New York",
customer: {
age: 50,
email: "customer@email.com",
satisfaction: 5
},
visits: [
{
year: 2020,
score: 10
},
{
year: 2021,
score: 8
},
{
year: 2022
score: 7
}
]
}

如果运行查询 SELECT * FROM customerInfo,Atlas SQL 会返回包含以下顶级字段的文档:

id

1

location

"New York"

satisfaction

5

customer

{ age: 50, 电子邮件: "customer@email.com",statusment: 5 }

visits

[ { 年份:2020,得分:10 }, { 年份:2021,得分:8 }, { 年份:2022,得分:7 } ]

如果运行查询 Select * from FLATTEN(UNWIND(customerInfo WITH PATH => visits, INDEX => idx)),Atlas SQL 会返回包含以下顶级字段的文档:

id

1

1

1

location

"New York"

"New York"

"New York"

satisfaction

5

5

5

customer_age

50

50

50

customer_email

"customer@email.com"

"customer@email.com"

"customer@email.com"

idx

0

1

2

visits_year

2020

2021

6 月

visits_score

10

8

7

当您同时使用FLATTENUNWIND函数时, visits大量将展开,然后生成的文档将被展平。

后退

私有端点