1、下载:
https://www.mongodb.com/try/download/community
2、安装
-
解压下载包后正常步骤安装
-
创建服务
e:\Application-develop\MongoDB\bin
为路径
data
、log
文件若安装之后没有,需提前创建
在cmd中运行以下命令,将相关路径更改成你的即可【注意:cmd要以管理员身份运行,否则无效!!!】
e:\Application-develop\MongoDB\bin>mongod --install --dbpath E:\Application-develop\MongoDB\data --logpath E:\Application-develop\MongoDB\log\mongodb.log
验证:window键+R,输入services.msc,回车,即可看见已成功创建的mongodb服务
-
启动服务
在刚刚的cmd中继续运行代码 net start mongodb
-
登录(验证是否安装成功)
继续输入命令 mongo
,可看到详细信息
可通过命令exit
退出
-
补充(周边语法)
删除服务:e:\Application-develop\MongoDB\bin>mongod --remove
关闭服务:e:\Application-develop\MongoDB\bin>net stop mongodb
3、查看数据库
语法:show databases
仍然是在cmd中进行,输入命令mongo登录成功后,输入查看数据库命令show databases
4、选择数据库
语法:use dbname
[ use +数据库名称 ]
【注:在mongodb中选择不存在的数据库不会报错,后期若该数据库有数据时,系统将自动创建】
5、查看集合
语法:show collections
6、创建集合
语法:db.createCollection('集合名')
7、删除集合
语法:db.集合名.drop()
8、删除数据库
语法:db.dropDatabase()
步骤:先通过use
选择数据库,再使用上述命令删除数据库
9、添加数据
语法:db.集合名.insert(JSON数据)
(若集合存在则直接插入,不存在则隐式创建集合后再插入数据)
mongodb底层是使用js引擎实现的,支持部分js语法
如快速插入十条数据:
for(var i=0;i<10;i++){ db.c1.insert({name:'a'+i,age:i}) }
10、查询数据
语法:db.集合名.find(条件,[,查询的列])
条件:
查询所有数据:{}或不写
查询age=6的数据:{age=6}
查询age=6,sex=男的数据:{age=6,sex=‘男’}
查询的列:(可选)
不写:查询全部字段
{age:1}:只显示age列/字段
{age:0}:除了age列/字段,都显示
条件运算符:
$gt
大于
$gte
大于等于
$lt
小于
$lte
小于等于
$ne
不等于
$in
in
$nin
not in
db.c1.find({age:{$gt:3}})
查找age大于3的数据
db.c1.find({age:{$in:[3,4]}})
查找age为3,4的数据
db.c1.find({},{age:1)
只看字段为age的列数据(_id依然会显示)
db.find().pretty()
查看所有数据,并格式化的展示
11、修改数据
语法:db.集合名.update(条件,新数据[,是否新增,是否修改多条])
是否新增:指条件匹配不到数据时插入,true为插入,false为不插入(默认)
是否修改多条:将匹配成功的数据都修改,true为都修改,false为只修改一条(默认)
修改器:
$inc
递增
$rename
重命名列
$set
修改列值
$unset
删除列
db.c1.update({username:'z3'},{$set:{username:'z2'}})
修改z3姓名改为z2
db.c1.update({username:'z2'},{$inc:{age:2}})
给z2的age增加2
12、删除数据
语法:db.集合名.remove(条件,[,是否删除一条])
是否删除一条:true为是,false为删除多条
13、排序
语法:db.集合名.find().sort(JSON数据)
db.c1.find().sort({age:-1})
将age列按降序排列
db.c1.find().sort({age:1})
将age列按升序排列
14、Limit与Skip方法
语法:db.集合名.find().sort().skip(数字).limit(数字)
skip:跳过指定数量(可选)
limit:限制查询的数量
db.c1.find().sort({age:-1}).skip(0).limit(2)
按降序查询两条数据
db.c1.find().sort({age:-1}).skip(1).limit(2)
按降序查询两条数据,跳过排列的第一条数据
15、实现分页
语法:db.集合名.find().skip().limit()
ex. 数据库1-10条数据,每页展示两条(5页)
第一页:db.c1.find().skip(0).limit(2)
第三页:db.c1.find().skip(4).limit(2)
第五页:db.c1.find().skip(8).limit(2)
skip计算公式:(当前页-1)*每页显示的条数
16、统计总数
语法:db.集合名.find().count()
17、聚合查询
语法:
db.集合名.aggregate([]
{管道:{表达式}}
....
)
常用管道:
$group
将集合中的文档分组,用于统计结果
$match
过滤数据,只要输出符合条件的文档
$sort
聚合数据进一步排序
$skip
跳过指定文档数
$limit
限制集合数据返回文档数
常用表达式:
$sum
总和 $sum:1同count表示统计
$avg
平均
$min
最小值
$max
最大值
分别统计男、女生的年龄和:
db.c1.aggregate([
{
$group:{
_id: “$sex”,
rs: {$sum:"$age"}
}
}
])
分别统计男、女生人数:
db.c1.aggregate([
{
$group:{
_id: “$sex”,
rs: {$sum:1}
}
}
])
统计学生总数和平均年龄:
db.c1.aggregate([
{
$group:{
_id: null,
total_num: {$sum:1}
total_avg: {$avg:"$age"}
}
}
])
分别查询男、女生人数,按人数升序:
db.c1.aggregate([
{
$group:{
_id: “$sex”,
num: {$sum:1}
}
}
{
$sort:{num:1}
}
])
18、索引
创建索引:db.集合名.createIndex(待创建索引的列 [,额外选项])
待创建索引的列:{键:1,…,键:-1} (1为升序,-1为降序)
额外选项:设置索引的名称或唯一索引等
删除索引:
全部删除:db.集合名.dropIndexes()
删指定除:db.集合名.dropIndex(索引名)
查看索引:db.集合名.getIndexes()
给name创建索引并起名othername:
db.集合名.createIndex({name:1},{name:'othername'})
给name和age添加组合索引:db.集合名.createIndex({键1:方式,键2:方式})
创建唯一索引:db.集合名.createIndex(待添加索引的列,[unique:列名])
分析索引:db.集合名.find().explain('executionStats')
【其中索引扫描方式:COLLSCAN–全表扫描,IXSCAN–索引扫描,FETCH–根据索引去检索指定document】
【可根据分析索引添加后的查找耗时决定是否加索引】
19、MongoDB权限机制
我们发现在DOS窗口直接输入mongo
命令即可登录数据库,这样是不够安全的
解决方法:使用权限机制,开启验证模式即可
步骤:
(1)添加超级管理员
(2)退出卸载服务
- 在bin目录下,
mongod --remove
【要使用管理员身份进行】
(3)重新安装需要输入账号密码的服务(在原安装命令基础上加上–auth即可)
- bin目录下
mongod --install --dbpath E:\Application-develop\MongoDB\data --logpath E:\Application-develop\MongoDB\log\mongodb2.log --auth
同前面,文件地址为自己所设置的
(4)启动服务 -> 登录测试
net start mongodb
成功后,mongo登录后不会报错
(5)通过超级管理员账号登录
- 方法1:
mongo 127.0.0.1:27017/admin -u 用户名 -p 用户密码
- 方法2:登录 ->
use admin
-> db.auth('用户名','用户密码')
20、备份还原
语法:mongodump -h -prot -u -p -d -o
-h
host 服务器IP地址
-port
端口,一般不写,默认27017
-u
user 账号
-p
pwd 密码
-d
database 数据库(数据库不写则导出全部)
-o
open 备份数据到指定目录下
【一个小插曲,‘mongodump’ 不是内部或外部命令,也不是可运行的程序或批处理文件,怎么解决】
发现是工具缺失的缘故,对应补充工具下载链接:https://www.mongodb.com/try/download/database-tools
下载完解压后后将对应工具复制到bin目录下即可
再运行命令即可
备份指定数据库:mongodump -u 用户名 -p 密码 -d 数据库名 -o 存放地址
备份全部:mongodump -u 用户名 -p 密码 -o 存放地址
语法:mongorestore -h -port -u -p -d --drop 备份数据目录
还原所有:mongorestore -u 用户名 -p 密码 --drop 备份数据目录
还原指定数据库:mongorestore -u 用户名 -p 密码 -d 数据库名 --drop 备份数据目录\数据库名
-h
host 服务器IP地址
-port
端口,一般不写,默认27017
-u
user 账号
-p
pwd 密码
-d
database 数据库(数据库不写则还原全部数据库)
--drop
先删除数据库再导入,不写则覆盖
先删除一个数据库,以操作还原
执行还原命令
验证
21、可视化管理工具
Robo 3T 下载:https://robomongo.org/download
傻瓜式安装,下一步到底,然后运行
即可对数据库进行管理了
22、mongoose
mongoose是node中提供操作MongoDB的模块,能通过node语法实现对MongoDB数据库的增删改查操作,从而实现用node写程序来管理MongoDB数据库
下载命令:npm install mongoose
或 yarn add mongoose
mongoose核心概念:
- schema 约束字段/列数据
- model模型 对应集合,后期用它来实现数据的增删改查
中文文档:http://mongoosejs.net/
英文文档:https://mongoosejs.com/
23、mongoose的使用
项目中安装mongoose,npm install mongoose
或 yarn add mongoose
const mongoose=require('mongoose');
const db=mongoose.createConnection('mongodb://user:password@localhost:27017/database',{useNewUrlParser:true,useUnifiedTopology:true},err=>{
if(err){
console.log('数据库连接失败:',err);
return;
}
console.log('数据库连接成功');
})
const model=db.model('users',{
username:{type:String},
password:String,
age:Number,
sex:String,
phone:Number
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)