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都会被替换