MongoDB数据库的操作
理论知识
什么是NoSQL?
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
什么是MongoDB ?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
NoSQL与普通数据库的不同之处
Windows 平台安装 MongoDB
1.安装MongoDB:下载安装包https://www.mongodb.com/download-center/compass
2.配置环境变量
安装目录:C:\Program Files\MongoDB\Server\4.0
配置环境变量:
3.配置数据目录
MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。请注意,数据目录应该放在根目录下,此处在c盘根目录下建立mongodb目录。
4.启动MongoDB服务
mongod --dbpath C:\mongodb
4.连接MongoDB数据库(两种)
第一种:启动本地数据库(配置好环境变量的前提下)
mongo
第二种:连接远程数据库(此处演示连接本机)
mongo 127.0.0.1:27017
两种启动方式都可以
启动成功之后就可以进行增删改查的学习了
linux下安装MongoDB
1.上传数据包
2.解压
3.在根目录创建/data/db目录,存放数据
4.修改/data、/data/db所属用户与组为运行MongoDB程序的用户
5.启动MongoDB(前台启动)
mongod --dbpath /data/db
6.后台启动命令
6.1在/data/db下新建文件“mongodb.cnf”
6.2修改内容为:
dbpath=/data/db/
logpath=/data/db/mongo.log
logappend=true
fork=true
port=27017
6.3启动MongoDB服务:mongod -f ./mongodb.cnf
6.4进入MongoDB shell :mongo
系统命令
1.清除屏幕
cls
2.key可以不加""引号
查
首先学习查询的相关命令
1.显示所有数据库
show dbs
2.由于数据库中没有表的概念,所以此处为查询库中的集合有那哪些
show collections
3.查询集合内的所有数据
db.集合名.find(); -->相当于:select * from TableName
4.查询当前聚集集合中name列的不重复数据(有重复数据就出现一次)
db.集合名.distinct("name“); -->会过滤掉 name 列中的相同数据
相当于:select distict name from ben;
5.查询年龄为14的记录
db.ben.find({"age":14});-->相当于: select * from ben where age = 22;
6.查询age为22,name是ben的记录
db.ben.find({"name":"ben","age":10});
6.查找年龄大于10岁的记录
db.ben.find({"age":{$gt:10}});
$gt大于、$lt小于、$gtl大于等于、$lte小于等于
由于大于、小于等等这些没有什么区别,就不一一展示,下面看一个
7.大于等于10岁并且小于等于20岁
db.ben.find({"age":{gte:10,lte:20}});
模糊查询(搜索)
8.查询name中包含ben的记录
db.ben.find({name:/ben/});
9.查询name中以b开头的记录
db.ben.find({name:/^b/});
10.查询指定行、列记录
10.1 查询所有记录的所有字段(两条命令一样)
db.ben.find({},{name:1,age:1});
db.ben.find({},{name:true,age:true});
11.查询指定列 name、age 数据, age > 10
db.ben.find({age:{$gt:10}},{name:1,age:1});
12.按照年龄排序 1 升序 -1 降序
db.ben.find().sort({age:1});
13.查询前2条数据
db.ben.find().limit(2);
14.查询2条以后数据
db.ben.find().skip(2)
15.查询2-5数据(跳过2个查2个)
db.ben.find().limit(2).skip(2);
16.or(或)查询 age 是 14或15岁
db.ben.find({$or:[{age:14},{age:15}]});
17.findOne 查询第一条数据
db.ben.findOne(); O不可小写
18.查询某个结果集的记录条数 统计数量
db.ben.find({age:{$gte:11}}); //3
增加(插入)
1.选择数据库、创建数据库
use DBName
注意:创建数据库后,如果库里面没有集合,那么使用“show dbs”查询不到新创建的数据库,如果真的想把这个数据库创建成功,那么必须插入一个数据,由于数据库中不能直接插入数据,只能往集合(collections)中插入数据。;
2.增加数据
db.集合名.insert({"name":"zhangsan"});
待补充------
删除
1.删除ben1集合(use 数据库后再执行操作)
db.ben1.drop(); //删除之后如果该数据库没有集合了,那么该数据库也就不存在了
2.删除某一个数据库
db.dropDatabase(); //需要use 目标数据库 后再执行该命令
3.删除某一行数据(删除student集合中name为xiaoming的行记录)
db.student.remove({"name":"xiaoming"});
3.上面一条命令执行后,若多条记录的name都为benjamin,则会删除多条数据,若执行删除一条数据(顶端的),则执行下方命令
删除admin集合中username为admin的行记录的第一条记录
db.admin.remove({"username":"admin"},{justOne:true});
修改
1.修改集合内的行数据(将name为“ben”的改为“benjamin”)
db.ben.update({"name":"ben"},{$set:{"name":"benjamin"}});
2.修改集合内的行数据(将name为“benjamin”的age改为“20”)
db.ben.update({"name":"benjamin"},{$set:{age:20}});
注意
$set不能省略,不然修改的本条数据全部的key-value都会被替换