一、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()
。