基本操作
mongod
- 打开或者新建一个数据库dir
1 | PS C:\Users\16218> mongod --install --dbpath=D:/mongodb-win32-x86_64-windows-4.4.2/data --logpath=D:/mongodb-win32-x86_64-windows-4.4.2/logs/mongodb.log |
- 周边语法
1 | PS C:\Users\16218> bin/mongod.exe --install --dbpath 磁盘路径 --logpath 日志路径 // 创建服务 |
mongoimport
–db 导入到那个库
–collection 导入到哪个集合
–drop 加上就表示清空原有文档
–file 要导入的文件
1 | PS C:\Users\16218> mongoimport --db test --collection user --drop --file dir |
mongo
数据库(查看、创建、选择、删除)
查看:show databases
创建:有单独的语法 但是忽略 隐式创建
选择:use 数据库名
删除:1.通过use选中数据库 2.通过db.dropDatabase()删除数据库
集合(查看、创建、删除)
查看:show collextions
创建:db.createCollection(‘集合名’) 多学一招:忽略 后期插入数据 隐式创建集合
删除:db.集合名.drop()
C插入文档
语法:db.集合名.insert(JSON数据)
说明:集合存在 则直接插入数据 集合不存在 则隐式创建
练习:在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁)
1 | > use test2 |
思考1:是否可以自定义_id值?
回答:可以,只需要给插入的JSON数据增加_id键即可覆盖(但实战强烈不推荐)
1 | > db.c1.insert({_id: 1, uname: "webopenfather", age: 18}) |
思考2:如何一次性插入多条记录?
回答:传递数据,数组中写一个个JSON数据即可
1 | > db.c1.insert([ |
思考3:如何快速插入10条数据?
回答:mongodb底层使用JS引擎实现的,所以支持部分js语法,因此可以写for循环
1 | > use test2 |
R查询文档
语法:db.集合名.find(条件 [,查询的列])
1 | 条件 |
升级语法:db.集合名.find({键: {运算符: 值}})
说明:
运算符 | 作用 |
---|---|
$gt | 大于 |
$gte | 大于等于 |
$lt | 小于 |
$lte | 小于等于 |
$ne | 不等于 |
$in | in |
$nin | not in |
练习1:查询所有数据
1 | > db.c1.find() |
练习2:查询年龄大于5岁的数据
1 | > db.c1.find({age: {$gt: 5}}) |
练习3:查询年龄是5岁、8岁、10岁的数据
1 | > db.c1.find({age: {$in: [5, 8, 10]}}) |
练习4:只看年龄列,或者年龄以外的列(_id别管它)
1 | > db.c1.find({}, {age: 1}) |
U修改文档
语法:db.集合名.update(条件, 新数据 [,是否新增,是否修改多条])
1 | 是否新增:指条件匹配不到数据则插入 true插入 false不插入(默认) |
升级语法:db.集合名.update(条件, {修改器: {键: 值}})
说明:
运算符 | 作用 |
---|---|
$inc | 递增 |
$rename | 重命名列 |
$set | 修改列值 |
$unset | 删除列 |
练习1:将{uname: “zc1”}改为{uname: “zc2”}
1 | > db.c3.update({uname: "zc1"}, {uname: "zc2"}) // 这是替换 |
练习2:给{uname: “zc10”}的年龄加2岁或减两岁
1 | > db.c3.update({uname: "zc1"}, {$inc: {age: 2}}) |
练习3:修改器综合练习
1 | uname改成zc2 |
D删除文档
语法:db.集合名.remove(条件, [,是否删除一条])
注意:是否删除一条 true是 false否(默认)
1 | > db.c3.remove({}, true) |
小总结
增Create
1 | > db.集合名.insert(JSON数据) |
删Delete
1 | > db.集合名.remove(条件, [,是否删除一条]) |
改Update
1 | > db.集合名.update(条件, 新数据 [,是否新增,是否修改多条]) |
查Read
1 | > db.集合名.find(条件 [,查询的列]) |
排序
语法:db.集合名.find().sort(JSON数据)
说明:键 就是要排序的列/字段 值 1升序 -1降序
练习1:年龄升序&降序
1 | > db.c1.find().sort({age: 1}) |
练习2:按照k1来排序 如果k1的值相同 按照k2来排序 1升序 -1降序
1 | > db.collectionName.find().sort({k1: 1}, {k2: -1}) |
Limit与Skip方法
语法:db.集合名.find().sort().skip(数字).limit(数字)
说明:skip跳过指定数量(可选),limit限制查询的数量
练习1:降序查询2条
1 | > db.c1.find().sort({age: -1}).skip(0).limit(2) |
练习2:降序跳过2条并查询2条
1 | > db.c1.find().sort({age: -1}).skip(2).limit(2) |
实战分页
需求:数据库 1 - 10 数据,每页显示2条(5页)
语法:db.集合名.find().skip().limit(2)
skip计算公式:(当前页 - 1) * 每页显示条数
聚合查询
语法:
1 | > db.集合名称.aggregate([ |
常用管道:
1 | $group 将集合中的文档分组,用于统计结果 |
常用表达式:
1 | $sum 总和 $sum:1同count表示统计 |
练习1:统计男生、女生的总年龄
1 | > db.集合名称.aggregate([ |
练习2:统计男生、女生的总人数
1 | > db.集合名称.aggregate([ |
练习3:求学生总数和平均年龄
1 | > db.集合名称.aggregate([ |
练习4:查询男生、女生人数,按人数升序
1 | > db.集合名称.aggregate([ |
Linux环境安装MongoDB
- 下载
1 | [root@VM-8-3-centos ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.2.tgz |
- 解压
1 | [root@VM-8-3-centos ~]# tar -zxvf mongodb-linux-x86_64-rhel70-4.4.2.tgz |
- 将解压包拷贝到指定目录
1 | [root@VM-8-3-centos ~]# mv mongodb-linux-x86_64-rhel70-4.4.2/ /usr/local/mongodb |
- 创建数据存放目录与日志存放目录
1 | [root@VM-8-3-centos ~]# mkdir -p /usr/local/mongodb/data /usr/local/mongodb/logs |
- 启动MongoDB服务
1 | [root@VM-8-3-centos ~]# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork |
- 后期登录即可
1 | [root@VM-8-3-centos ~]# /usr/local/mongodb/bin/mongo |