MongoDB的使用

一、MongoDB的特点

  1. 高性能:MongoDB提供高性能的数据持久性,对嵌入式数据模型的支持减少了数据库系统上的I/O活动。
  2. 灵活的数据模型:MongoDB支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据类型。
  3. 强大的查询语言:MongoDB的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
  4. 高可用性:MongoDB的复制工具称为副本集,它可提供自动故障转移和数据冗余。
  5. 水平可扩展性: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+树)实现,这种数据结构允许对数据进行快速的插入、删除和查找操作。

(一)索引的类型

  1. 单字段索引(Single Field Index):①在单个字段上创建索引,用于加速对单个字段的查询。②示例:db.collection.createIndex({ name: 1 })(1表示升序,-1表示降序)。
  2. 复合索引(Compound Index):①在多个字段上创建索引,适用于多个字段的联合查询。②索引的顺序很重要,通常根据查询的常见模式选择字段的顺序。③示例:db.collection.createIndex({ firstName: 1, lastName: -1 })
  3. 多键索引(Multikey Index):①用于数组字段的索引,每个数组元素都会作为一个独立的索引条目。②示例:db.collection.createIndex({ tags: 1 })
  4. 文本索引(Text Index):①用于全文搜索,支持对字符串字段的全文搜索,并提供了多语言支持。②示例:db.collection.createIndex({ content: "text" })
  5. 地理空间索引(Geospatial Index):①用于地理位置数据的查询,支持2d和2dsphere索引。②2d索引适用于平面上的地理位置信息,2dsphere索引适用于三维空间中的地理位置信息。③示例:db.collection.createIndex({ location: "2dsphere" })
  6. 哈希索引(Hashed Index):①对字段值进行哈希计算,常用于分片键以确保数据的均匀分布。②示例:db.collection.createIndex({ user_id: "hashed" })
  7. 唯一索引(Unique Index):①确保索引字段的值唯一。②示例:db.collection.createIndex({ field: 1 }, { unique: true })
  8. 部分索引(Partial Index):①只索引集合中符合指定条件的文档。②示例:db.collection.createIndex({ field: 1 }, { partialFilterExpression: { status: "active" } })
  9. 稀疏索引(Sparse Index):①只索引那些包含索引字段的文档。②示例:db.collection.createIndex({ field: 1 }, { sparse: true })
  10. 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()

相关推荐
猿小喵12 分钟前
DBA之路,始于足下
数据库·dba
tyler_download21 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
weixin_449310841 小时前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql
Cachel wood2 小时前
Github配置ssh key原理及操作步骤
运维·开发语言·数据库·windows·postgresql·ssh·github
standxy2 小时前
如何将钉钉新收款单数据高效集成到MySQL
数据库·mysql·钉钉
Narutolxy3 小时前
MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108
数据库·mysql
Venchill3 小时前
安装和卸载Mysql(压缩版)
数据库·mysql
Humbunklung3 小时前
一种EF(EntityFramework) MySQL修改表名去掉dbo前缀的方法
数据库·mysql·c#
PGCCC4 小时前
【PGCCC】postgresql 缓存池并发设计
数据库·缓存·postgresql
小爬虫程序猿4 小时前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python