一、MongoDB的特点
- 高性能:MongoDB提供高性能的数据持久性,对嵌入式数据模型的支持减少了数据库系统上的I/O活动。
- 灵活的数据模型:MongoDB支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据类型。
- 强大的查询语言:MongoDB的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
- 高可用性:MongoDB的复制工具称为副本集,它可提供自动故障转移和数据冗余。
- 水平可扩展性:MongoDB提供了水平可扩展性作为其核心功能的一部分,分片将数据分布在一组集群的机器上。
二、MongoDB的安装与启动
1、下载
https://www.mongodb.com/download-center/community
2、安装

3、MongoDB服务
MongoDB安装成功之后,会在Windows系统上创建服务
4、 MongoDB的启动与关闭
①启动:net start “MongoDBserver”
②关闭:net stop “MongoDBserver”
三、Studio 3T下载
1、网址
https://robomongo.org/download
2、安装成功 创建连接

3、查询数据
4、语言切换
四、MongoDB用户管理
1、MongoDB的账户
①MongoDB是不需要账户就能登录使用的,但是为了数据安全,还是需要设置一个登录账号
②MongoDB内置了很多种用户角色,创建用户的时候需要分配角色
2、内置角色
Read 允许用户读取指定逻辑库
readWrite 允许用户读写制定逻辑库
dbAdmin 可以管理指定的逻辑库
userAdmin 可以管理指定逻辑库的用户
readAnyDatebase 只可以把用户创建在admin逻辑库中,允许读取任何逻辑库
readWriteAnyDatabase 只可以把用户创建在admin逻辑库中,允许读写任何逻辑库
dbAdminAnyDatabase 只可以把用户创建在admin逻辑库中,允许管理任何逻辑库
userAdminAnyDatabase 只可以把用户创建在admin逻辑库中,允许管理任何逻辑库用户
clusterAdmin 只可以把用户创建在admin逻辑库中,允许管理MongoDb集群
root 只可以把用户创建在admin逻辑库中,超级管理员,拥有最高权限
五、MongoDB增删改查
1、插入
在 MongoDB 中,可以使用 insertOne() 或 insertMany() 方法来插入文档。
// 插入一个文档  
db.collection.insertOne({  "name": "John Doe",  "age": 30,  "city": "New York"  
})  // 插入多个文档  
db.collection.insertMany([  {"name": "Jane Doe", "age": 25, "city": "Paris"},  {"name": "Mike Smith", "age": 35, "city": "London"}  
])2、查询
查询操作在 MongoDB 中非常灵活,可以使用 find() 方法来检索文档。
// 查询所有文档  
db.collection.find({})  // 查询特定条件的文档  
db.collection.find({ "age": 30 })  // 查询并限制返回结果的数量  
db.collection.find({}).limit(2)  // 查询并跳过一定数量的文档  
db.collection.find({}).skip(1)  // 投影:只返回特定字段  
db.collection.find({}, {"name": 1, "_id": 0}) // 1 表示包含,0 表示不包含3、更新
更新操作可以使用 updateOne()、updateMany() 或 replaceOne() 方法。
// 更新一个文档  
db.collection.updateOne(  { "name": "John Doe" },  { "$set": { "age": 31 } }  
)  // 更新多个文档  
db.collection.updateMany(  { "age": { "$lt": 30 } },  { "$set": { "status": "Young" } }  
)  // 替换一个文档  
db.collection.replaceOne(  { "name": "Jane Doe" },  { "name": "Jane Doe Updated", "age": 26, "city": "Berlin" }  
)4、删除
删除操作可以使用 deleteOne() 或 deleteMany() 方法。
// 删除一个文档  
db.collection.deleteOne({ "name": "John Doe" })  // 删除多个文档  
db.collection.deleteMany({ "age": { "$gte": 30 } })六、MongoDB 索引机制
索引是数据库中用于加速数据检索的特殊数据结构,它以某种方式组织数据,以便快速查找匹配的记录。在MongoDB中,索引基于B树(实际上是B+树)实现,这种数据结构允许对数据进行快速的插入、删除和查找操作。
(一)索引的类型
- 单字段索引(Single Field Index):①在单个字段上创建索引,用于加速对单个字段的查询。②示例:db.collection.createIndex({ name: 1 })(1表示升序,-1表示降序)。
- 复合索引(Compound Index):①在多个字段上创建索引,适用于多个字段的联合查询。②索引的顺序很重要,通常根据查询的常见模式选择字段的顺序。③示例:db.collection.createIndex({ firstName: 1, lastName: -1 })。
- 多键索引(Multikey Index):①用于数组字段的索引,每个数组元素都会作为一个独立的索引条目。②示例:db.collection.createIndex({ tags: 1 })。
- 文本索引(Text Index):①用于全文搜索,支持对字符串字段的全文搜索,并提供了多语言支持。②示例:db.collection.createIndex({ content: "text" })。
- 地理空间索引(Geospatial Index):①用于地理位置数据的查询,支持2d和2dsphere索引。②2d索引适用于平面上的地理位置信息,2dsphere索引适用于三维空间中的地理位置信息。③示例:db.collection.createIndex({ location: "2dsphere" })。
- 哈希索引(Hashed Index):①对字段值进行哈希计算,常用于分片键以确保数据的均匀分布。②示例:db.collection.createIndex({ user_id: "hashed" })。
- 唯一索引(Unique Index):①确保索引字段的值唯一。②示例:db.collection.createIndex({ field: 1 }, { unique: true })。
- 部分索引(Partial Index):①只索引集合中符合指定条件的文档。②示例:db.collection.createIndex({ field: 1 }, { partialFilterExpression: { status: "active" } })。
- 稀疏索引(Sparse Index):①只索引那些包含索引字段的文档。②示例:db.collection.createIndex({ field: 1 }, { sparse: true })。
- TTL索引(Time-to-Live Index):①自动删除过期的文档,只能用于日期字段。②示例:db.collection.createIndex({ "create_time": 1 }, { expireAfterSeconds: 3600 })(3600秒后过期)。
(二)索引的操作
1、创建索引:使用createIndex方法创建索引,如db.collection.createIndex({ name: 1 })。
 2、查看su:使用getIndexes方法查看集合中的索引,如db.collection.getIndexes()。
 3、删除索引:使用dropIndex方法删除指定的索引,如db.collection.dropIndex({ name: 1 })。也可以使用dropIndexes方法删除集合上的所有索引,如db.collection.dropIndexes()。
