Skip to content

Commit a35ed59

Browse files
committed
Added Chinese translation
1 parent d30d5e8 commit a35ed59

36 files changed

+1718
-2
lines changed

docusaurus.config.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ const config = {
9999
staticDirectories: ["static"],
100100
i18n: {
101101
defaultLocale: "en",
102-
locales: ["en"],
102+
locales: ["en", "zh"]
103103
},
104104
customFields: {
105105
startButtonTitle: `${startButtonTitle}`,
@@ -153,7 +153,10 @@ const config = {
153153
height: "100%",
154154
},
155155
items: [
156-
156+
{
157+
type: "localeDropdown",
158+
position: "right",
159+
},
157160
],
158161
},
159162
footer: {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"label": "先决条件",
3+
"position": 2,
4+
"link": {
5+
"type": "generated-index",
6+
"description": "在本节中,您将创建您的 Atlas 账户并启动您的第一个数据库集群。"
7+
}
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
description: 设置您的 MongoDB Atlas 账户,创建 MongoDB 集群,并导入数据
3+
---
4+
5+
# 👐 设置实验
6+
7+
要跟上进度,您需要:
8+
- 一个 MongoDB Atlas 账户
9+
- 一个 MongoDB 集群
10+
- 测试数据。在本例中,这是用于图书馆管理系统的书籍、作者和评论数据。
11+
12+
👐 要获取这两者,请打开 [入门实验](https://mongodb-developer.github.io/intro-lab-cn/docs/intro) 并按照步骤操作(只需 10-15 分钟)以准备好您的数据库。完成后返回这里!
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
description: 了解什么是聚合管道
3+
---
4+
5+
# 📘 什么是聚合管道
6+
7+
![](/img/20-what-is-aggregation/aggregation-pipeline.png)
8+
9+
聚合管道类似于使用管道连接的 Unix 命令。
10+
我们可以构建模块化、可组合的处理管道。
11+
12+
一个聚合管道由一个或多个处理文档的 _阶段(stage)_ 组成:
13+
14+
每个阶段对输入文档执行一个操作。例如,一个阶段可以过滤文档、分组文档和计算值。
15+
16+
一个阶段的输出文档被作为输入,并传递给下一个阶段。
17+
18+
聚合管道可以返回文档组的结果。例如,返回总值、平均值、最大值和最小值等。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
---
2+
description: 让我们比较一下 SQL 和聚合管道
3+
---
4+
5+
# 📘 SQL 与聚合
6+
7+
## SQL
8+
9+
一个 SQL 查询语句通常以 `SELECT` 开始,在这里我们列出所需的字段,然后是 `FROM` 子句来指定将返回行的表(或在本例中为子查询)。我们可以使用 `WHERE` 进行筛选,并使用 `GROUP` 对数据进行分组。
10+
11+
我们从读取 SQL 需从嵌套中理解整个语句的含义。如果嵌套过多,则不易理解。
12+
13+
```sql
14+
SELECT
15+
city,
16+
SUM(annual_spend) Total_Spend,
17+
AVG(annual_spend) Average_Spend,
18+
MAX(annual_spend) Max_Spend,
19+
COUNT(annual_spend) customers
20+
FROM (
21+
SELECT t1.city, customer.annual_spend
22+
FROM customer
23+
LEFT JOIN (
24+
SELECT address.address_id, city.city,
25+
address.customer_id, address.location
26+
FROM address LEFT JOIN city
27+
ON address.city_id = city.city_id
28+
) AS t1
29+
ON
30+
(customer.customer_id = t1.customer_id AND
31+
t1.location = "home")
32+
) AS t2
33+
GROUP BY city;
34+
```
35+
36+
## 等效的 MongoDB 聚合管道
37+
38+
在这里我们通过三个阶段,一个返回 `address` 数组中每个元素的文档,然后我们筛选出仅包含 `home` 地址位置的文档,最后我们进行分组。正如我们将动手实践并看到的,MongoDB 聚合管道可以分开测试,并且运行逻辑类似于我们的代码结构本身。
39+
40+
```js
41+
db.customers.aggregate([
42+
{
43+
$unwind: "$address",
44+
},
45+
{
46+
$match: {"address.location": "home"}
47+
},
48+
{
49+
$group: {
50+
_id: "$address.city",
51+
totalSpend: {$sum: "$annualSpend"},
52+
averageSpend: {$avg: "$annualSpend"},
53+
maximumSpend: {$max: "$annualSpend"},
54+
customers: {$sum: 1}
55+
}
56+
}
57+
])
58+
```
59+
60+
:::info
61+
另请参阅 [SQL 与聚合映射表](https://www.mongodb.com/docs/manual/reference/sql-aggregation-comparison/)
62+
:::
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
description: 查看组成聚合管道的部分
3+
---
4+
5+
# 📘 聚合管道的结构
6+
7+
通常,我们使用 SQL 这种第四代语言来与关系型数据库进行交互。而在 MongoDB 中,我们通过增量步骤来获取和转换数据。
8+
9+
一个聚合管道是由 [__阶段__](https://www.mongodb.com/docs/manual/reference/operator/aggregation-pipeline/) 组成的。
10+
11+
我们将一个包含多个阶段的数组传递给 `aggregate` 方法,如下所示:
12+
13+
```
14+
db.mycollection.aggregate([
15+
stage1,
16+
stage2,
17+
stage3
18+
])
19+
```
20+
21+
## 示例
22+
23+
一个执行上述 SQL 语句的聚合管道示例如下:
24+
25+
```
26+
db.mycollection.aggregate([
27+
{
28+
$sort:
29+
/**
30+
* 提供任意数量的字段/排序对。
31+
*/
32+
{
33+
num_mflix_comments: -1,
34+
},
35+
},
36+
{
37+
$limit:
38+
/**
39+
* 提供要限制的文档数量。
40+
*/
41+
1,
42+
},
43+
{
44+
$unwind:
45+
/**
46+
* path: 数组字段的路径。
47+
* includeArrayIndex: 索引名称(可选)。
48+
* preserveNullAndEmptyArrays: 展开 null 和空值(可选)。
49+
*/
50+
{
51+
path: "$cast",
52+
},
53+
},
54+
{
55+
$project:
56+
/**
57+
* 规范:要包含或排除的字段。
58+
*/
59+
{
60+
cast: 1,
61+
},
62+
},
63+
])
64+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"label": "聚合管道",
3+
"position": 30,
4+
"link": {
5+
"type": "generated-index",
6+
"description": "学习聚合管道的基础知识及其与 SQL 的对比。"
7+
}
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import Tabs from '@theme/Tabs';
2+
import TabItem from '@theme/TabItem';
3+
4+
# 👐 使用图书馆数据库
5+
6+
## 选择图书馆数据库
7+
8+
💻 我们将在此实验中使用 `library` 数据库进行所有实践练习。
9+
如果您还没有执行前置数据导入操作,请将[图书馆数据](https://mdb.link/import-library-data)导入到您的数据库集群中。
10+
11+
<Tabs groupId="aggregations">
12+
<TabItem value="atlas" label="Atlas UI">
13+
14+
在聚合管道构建器中选择正确的数据库。
15+
16+
<Screenshot src="/img/30-simple-queries/select-db.png" url="http://cloud.mongodb.com/yourcluster" alt="AtlasUI 显示可用的数据库" />
17+
18+
</TabItem>
19+
<TabItem value="mongodb-shell" label="MongoDB Shell">
20+
21+
要做到这一点,在 MongoDB shell 中输入:
22+
23+
```
24+
use library
25+
```
26+
27+
您可以显示所有集合:
28+
29+
```
30+
show collections
31+
```
32+
33+
---
34+
35+
🦸‍♂️ 💻 如何切换到名为 `orders` 的数据库?
36+
37+
:::info
38+
额外活动:如果您有额外的时间或在家中进行,请执行此操作,动手实验期间不会涉及。
39+
:::
40+
41+
<details>
42+
<summary>答案</summary>
43+
<div>
44+
45+
```
46+
use orders
47+
```
48+
49+
即使这个数据库尚不存在,MongoDB 也可以切换到它。如果我们创建一个集合、用户等,那么这个数据库将被创建。
50+
51+
记住通过以下方式返回到 library 数据库:
52+
53+
```
54+
use library
55+
```
56+
</div>
57+
</details>
58+
59+
## 🦸‍♂️ 显示所有数据库
60+
61+
:::info
62+
额外活动:如果您有额外的时间或在家中进行,请执行此操作,动手实验期间不会涉及。
63+
:::
64+
65+
您还可以使用以下命令列出 MongoDB 实例中的其他数据库:
66+
67+
```
68+
show databases
69+
```
70+
71+
</TabItem>
72+
73+
</Tabs>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import Tabs from '@theme/Tabs';
2+
import TabItem from '@theme/TabItem';
3+
4+
# 👐 空聚合管道
5+
6+
## 一个空的聚合
7+
8+
这段代码相当于 `SELECT * FROM AUTHORS`。返回一个包含 `authors` 集合中所有文档的 [游标(cursor)](https://www.mongodb.com/docs/manual/reference/method/js-cursor/)
9+
10+
<Tabs groupId="aggregations">
11+
12+
<TabItem value="atlas" label="Atlas UI">
13+
14+
<Screenshot src="/img/30-simple-queries/atlas-aggregation.png" url="http://cloud.mongodb.com/" alt="Atlas UI 显示空的聚合管道" />
15+
16+
- 打开 `Aggregation` 选项卡。
17+
- 选择 `Text`
18+
- 输入如下一个空数组,注意编辑器中的空数组表示一个空的聚合管道:
19+
20+
```
21+
[]
22+
```
23+
24+
</TabItem>
25+
26+
<TabItem value="mongodb-shell" label="MongoDB Shell">
27+
28+
```
29+
db.authors.aggregate([])
30+
```
31+
32+
我们可以遍历返回的游标并通过输入 `it` 获取更多的文档。
33+
34+
👐 返回 `books` 集合中的所有文档并迭代获取下一页的书籍。
35+
36+
<details>
37+
<summary>答案</summary>
38+
<div>
39+
40+
```
41+
db.books.aggregate([])
42+
it
43+
```
44+
</div>
45+
</details>
46+
47+
## 🦸‍♂️ 游标方法
48+
49+
:::info
50+
额外活动:如果您有额外的时间或在家中进行,请执行此操作,动手实验期间不会涉及。
51+
:::
52+
53+
一个[游标](https://www.mongodb.com/docs/manual/reference/method/js-cursor/)有几个有用的方法,例如我们可以使用 `itcount` 检查返回游标的大小
54+
55+
```
56+
cursor.itcount()
57+
```
58+
59+
👐 在我们之前的空聚合示例中,检查返回游标的大小,我们应该输入什么?
60+
61+
<details>
62+
<summary>答案</summary>
63+
<div>
64+
65+
```
66+
// 因为 db.books.aggregate([]) 返回一个游标,我们可以直接调用 itcount()
67+
db.books.aggregate([]).itcount()
68+
```
69+
</div>
70+
</details>
71+
72+
</TabItem>
73+
74+
</Tabs>

0 commit comments

Comments
 (0)