MongoDB 使用手册 - 入门
本教程将引导您将测试数据插入 MongoDB 数据库并使用文档的嵌入式 Web shell 查询该数据。您无需部署或安装 MongoDB 即可完成本教程。
1. 切换数据库
在shell中,db指的是您当前的数据库。键入db以显示当前数据库。
db
该操作应返回test,这是默认数据库。
要切换数据库,请键入use
use examples
切换前无需创建数据库。MongoDB 在您第一次在该数据库中存储数据时创建数据库(例如在数据库中创建第一个集合)。
要验证您的数据库现在是,请在上面的shellexamples中键入。db
db
2.插入
填充集合(插入)
MongoDB 将文档存储在集合中。集合类似于关系数据库中的表。如果集合不存在,MongoDB 会在您首次存储该集合的数据时创建该集合。
下面的示例使用该 db.collection.insertMany()
方法将新 文档插入到 movies
集合中。您可以将示例复制并粘贴到上面的 shell 中。
db.movies.insertMany([
{
title: 'Titanic',
year: 1997,
genres: [ 'Drama', 'Romance' ],
rated: 'PG-13',
languages: [ 'English', 'French', 'German', 'Swedish', 'Italian', 'Russian' ],
released: ISODate("1997-12-19T00:00:00.000Z"),
awards: {
wins: 127,
nominations: 63,
text: 'Won 11 Oscars. Another 116 wins & 63 nominations.'
},
cast: [ 'Leonardo DiCaprio', 'Kate Winslet', 'Billy Zane', 'Kathy Bates' ],
directors: [ 'James Cameron' ]
},
{
title: 'The Dark Knight',
year: 2008,
genres: [ 'Action', 'Crime', 'Drama' ],
rated: 'PG-13',
languages: [ 'English', 'Mandarin' ],
released: ISODate("2008-07-18T00:00:00.000Z"),
awards: {
wins: 144,
nominations: 106,
text: 'Won 2 Oscars. Another 142 wins & 106 nominations.'
},
cast: [ 'Christian Bale', 'Heath Ledger', 'Aaron Eckhart', 'Michael Caine' ],
directors: [ 'Christopher Nolan' ]
},
{
title: 'Spirited Away',
year: 2001,
genres: [ 'Animation', 'Adventure', 'Family' ],
rated: 'PG',
languages: [ 'Japanese' ],
released: ISODate("2003-03-28T00:00:00.000Z"),
awards: {
wins: 52,
nominations: 22,
text: 'Won 1 Oscar. Another 51 wins & 22 nominations.'
},
cast: [ 'Rumi Hiiragi', 'Miyu Irino', 'Mari Natsuki', 'Takashi Naitè' ],
directors: [ 'Hayao Miyazaki' ]
},
{
title: 'Casablanca',
genres: [ 'Drama', 'Romance', 'War' ],
rated: 'PG',
cast: [ 'Humphrey Bogart', 'Ingrid Bergman', 'Paul Henreid', 'Claude Rains' ],
languages: [ 'English', 'French', 'German', 'Italian' ],
released: ISODate("1943-01-23T00:00:00.000Z"),
directors: [ 'Michael Curtiz' ],
awards: {
wins: 9,
nominations: 6,
text: 'Won 3 Oscars. Another 6 wins & 6 nominations.'
},
lastupdated: '2015-09-04 00:22:54.600000000',
year: 1942
}
])
该操作返回一个包含确认指示符的文档和一个包含 _id
每个成功插入的文档的数组。
3. 全部查询
选择所有文件
要从集合中选择文档,可以使用 db.collection.find()
方法。要选择集合中的所有文档,请将一个空文档作为查询过滤器文档传递给该方法。
在shell中,复制并粘贴以下内容以返回movies 集合中的所有文档。
db.movies.find( { } )
4. 过滤数据
使用比较运算符过滤数据
对于相等匹配 ( <field>
equals <value>
),<field>: <value>
在查询过滤器文档中指定并传递给 db.collection.find()
方法。
在shell中,运行以下查询以查找导演的电影 Christopher Nolan
:
db.movies.find( { "directors": "Christopher Nolan" } );
您可以使用比较运算符 来执行更高级的查询:
- 运行以下查询以返回该年之前发布的电影
2000
:
db.movies.find( { "released": { $lt: ISODate("2000-01-01") } } );
- 运行以下查询以返回赢得多个
100
奖项的电影:
db.movies.find( { "awards.wins": { $gt: 100 } } );
- 运行以下查询以返回
languages
数组包含 or 的 电影:JapaneseMandarin
db.movies.find( { "languages": { $in: [ "Japanese", "Mandarin" ] } } )
也可以看看:查询和投影运算符
5. 项目领域
指定要返回的字段(投影)
要指定要返回的字段,请将投影文档传递给该 db.collection.find(<query document>, <projection document>)
方法。在投影文档中,指定:
<field>: 1
在返回的文档中包含一个字段<field>: 0
排除返回文档中的字段
在shell中,运行以下查询以返回集合中所有文档的 id
、title
、directors
和 year
字段:movies
db.movies.find( { }, { "title": 1, "directors": 1, "year": 1 } );
您不必指定 _id
字段即可返回该字段。它默认返回。要排除该字段,请 0
在投影文档中将其设置为。例如,运行以下查询以仅返回匹配文档中的title
, 和字段:genres
db.movies.find( { }, { "_id": 0, "title": 1, "genres": 1 } );
6. 聚合
汇总数据 ( $group
)
您可以使用聚合将多个文档中的值组合在一起并返回单个结果。MongoDB 中的聚合是使用聚合管道执行的。
虽然 find()
操作对于数据检索很有用,但聚合管道允许您操作数据、执行计算以及编写比简单的CRUD 操作更具表现力的查询。
在shell中,运行以下聚合管道来计算每个 genre
值的出现次数:
db.movies.aggregate( [
{ $unwind: "$genres" },
{
$group: {
_id: "$genres",
genreCount: { $count: { } }
}
},
{ $sort: { "genreCount": -1 } }
] )
管道使用:
$unwind
为 genres
数组中的每个元素输出一个文档。
$group
和$count
累加器来计算每个 genre
. 该值存储在 genreCount
字段中。
$sort genreCount
按字段降序对结果文档进行排序。
设置您自己的部署
要设置您自己的部署:
部署 | 描述 |
---|---|
MongoDB Atlas 免费层集群 | MongoDB Atlas 是一种快速、简单且免费的 MongoDB 入门方式。要了解更多信息,请参阅 Atlas 入门教程。 |
本地 MongoDB 安装 | 有关在本地安装 MongoDB 的更多信息,请参阅 安装 MongoDB。 |
其他示例
有关其他示例,包括 MongoDB 驱动程序特定示例(Python、Java、Node.js 等),请参阅:
查询文档示例
更新文档示例
删除文档示例
其他主题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构