当前位置: 首页 > article >正文

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()

 


http://www.kler.cn/news/325363.html

相关文章:

  • 组合逻辑元件与时序逻辑元件
  • QT开发:深入详解 Qt 核心类:QMap的基本概念和使用方法
  • Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示
  • 【测试】——JUnit
  • 全网最全软件测试面试题(含答案解析+文档)
  • Unity 新NavMesh演示(1)
  • 如何在 Ubuntu 22.04 上使用 Browserless?
  • CAD快捷键
  • CMMI认证的好处
  • 在Vue.js中,你可以使用Element UI的el-input组件结合计算属性来实现模糊查询
  • list模拟实现(部分)
  • 统一建模语言(UML)在软件研发过程中常用图接受:类图、用例图、时序图、状态图、活动图、流程图、顺序图
  • 【在Linux世界中追寻伟大的One Piece】命名管道
  • 探索词向量的奥秘:自然语言处理的基石
  • 【SOP】Windows下安装Neo4j流程
  • 头歌 应用密码学实验(1-3实验代码)
  • iOS 项目中的多主题颜色设计与实现
  • python股票因子,交易所服务器宕机,量化交易程序怎么应对
  • docker和ufw冲突问题
  • 【黑马软件测试一、二】软件测试基础与Linux、数据库
  • CFR( Java 反编译器)---> lambda 表达式底层实现机制
  • 【计算机网络】网络层详解
  • 解决Pymysql has no attribute ‘escape_string‘ 并且无法引入该模块
  • 爱速搭百度低代码开发平台
  • 视频汇聚EasyCVR视频监控平台调取接口提示“认证过期”是什么原因?
  • 通信工程师笔记
  • 生成对抗网络(Generative Adversarial Networks, GANs)
  • Pymsql 插入数据时报错 Unkown column xxxx in field list
  • 昇思MindSpore进阶教程--轻量化数据处理
  • 【HTTPS】中间人攻击和证书的验证