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数组将展开,然后生成的文档将被展平。

后退

Power BI