Mongodb
简介
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
在现代的计算系统上每天网络上都会产生庞大的数据量。
这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970年 E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。
通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
Linux安装mongodb
1 2 3 | curl - O https: / / fastdl.mongodb.org / linux / mongodb - linux - x86_64 - 3.0 . 6.tgz tar - zxvf mongodb - linux - x86_64 - 3.0 . 6.tgz mv mongodb - linux - x86_64 - 3.0 . 6 / / usr / local / mongodb |
下载,解压,拷贝到指定目录
添加至环境变量
1 | export PATH = $PATH: / usr / local / mongodb / bin |
设置生效
1 | source / etc / profile |
创建数据库目录
MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
1 | mkdir - p / data / db |
PS:如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定
启动
1 2 | cd / usr / local / mongodb / bin . / mongod |
进入终端
1 | . / mongo |
默认连接test数据库
使用自己的测试数据库
1 | use mydb |
插入一条数据
1 | db.mydb.user.insert({name: "111" }) |
将111插入到集合user的name字段中
使用find命令查找刚刚插入的数据
1 | db.mydb.user.find() |
Id是系统自动生成的唯一标识
PS:可以使用工具mongodbVUE连接mongodb数据库
文档是Mongodb中最基本的数据单元,类似于关系型数据库的行
例如:关系型数据库
username pasword | |
admin 123 |
文档表示
{username:"admin",password:"123"}
在mongodb中,文档的建通常都是字符串,对文档的键是区分大小写的,并且在同一文档中键值是不能重复的
在mongodb中,对集合中存储的文档是非常开放的,一个集合中可以存放各式各样的文档,强烈推荐同一种类型的文档放在同一个集合里面,例如
1 2 | {username: "admin" },{role: "admin" } #强烈反对 {username: "admin" },{username: "user" } #强烈推荐 |
什么是子集合
组织子集合的一种惯例是使用"."字符分开的按命名空间划分的子集合。在Mongodb中使用子集合来组织数据是很好的方法。
例如:
用户与用户详细信息包含两个集合,分别是user.user和user.userinfo这样做的目的是为了使组织结构更好些,也就是说user这个集合(这里根本就不需要存在)及其子集合没有任何关系。把数据库的名字放到集合前面,得到的就是集合的完全限定名,称为命名空间。
数据库
Mongodb中多个集合可以组成数据库
有些数据库名是保留的
命名规则
1,不能是空字符串
2,不可以包含空格,在Mongodb中空代表结束字符
3,文档的键不可以有"."和“"
4,集合不能以“system”开头,Mongodb中system是系统保留前缀
5,集合名长度不得超过121字节,在实际使用中应该小于100字节,数据库名最多不超过64个字节
数据类型
Mongodb的文件存储格式为BSON,同JSON一样
支持往其他文档对象和数组中再插入文档对象和数组
同时扩展了JSON的数据类型,与数据库打交道的那些应用。
1 2 3 4 | null: null用于表示空值或者不存在的字段。{ "x" :null} 布尔:布尔类型有两个值 'true' 和 'false' 。{ "x" :true} 浮点数:例如{ "pi" : 3.1415926 } 符号:符号类型转换成了字符串 |
练习
插入一条数据
1 | db.mydb.user.insert({name: "admin" ,password: 123 }) |
查看
1 | db.mydb.user.find() |
Mongodb的shell
查看函数源代码
1 | db.mydb.user.find |
简单查询
1 2 | find() #返回文档集合 findOne() #返回最先匹配到的文档对象 |
find返回值无法直接使用,findOne返回是一个文档对象可以使用
可以通过对象修改键值,把name对应的value修改为123
条件匹配查询
1 | db.mydb.user.find({password: 123 }) |
返回键为name的文档
1 | db.mydb.user.find({},{name: 1 }) |
删除和创建文档
不自定义ID
自定义id
删除指定文档
删除整个文档
1 | db.mydb.user.drop() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!