Docs 菜单

使用 Atlas SQL 语句进行查询

本页面提供了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=""></data>

必需

要展平的数据源。

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 ", 满意度: 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=""></data>

必需

待展开数组字段的源。

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 ", 满意度: 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 ", 满意度: 5 }

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

{ age: 50 , 电子邮件: " customer@email.com ", 满意度: 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 ", 满意度: 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

2022

visits_score

10

8

7

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