mongdb安装
https://www.mongodb.com/dr/fastdl.mongodb.org
- 解压
- 移动到/usr/local/目录下
sudo mv xxxx /usr/local/mongdb - 将可执行文件添加到PATH路径中
vi ~/.bash_profile
export PATH=/usr/local/mongodb/bin:$PATH
source ~/.bash_profile - 创建数据库保存路径
采用配置文件中的默认路径
sudo mkdir -p /data/db - 启动mongdb服务器
sudo mongd
检验mongd服务器是否启动,可访问地址 http://127.0.0.1:27017/ - 启动mongdb客户端
- 另起shell,输入指令mongo(未配置环境变量需要cd到指定路径下,exit退出)
- 可视化终端:Robo 3T
基本指令
- 查看数据库
show databases - 集合基础命令
- 不手动创建:
. 向不存在的集合中第一次加入数据时,集合会被创建出来 - 手动创建集合:
. db.createCollection(name,options)
. db.createCollection(“stu”)
. db.createCollection(“sub”,{capped:true,size:10})
capped默认false,capped设置为true,size表示上限大小,单位是字节 - 查看集合:
show collections - 删除集合:
db.集合名称.drop()
- 数据类型
- 类型
Object ID
String
Boolean
Integer
Double
Arrarys
Object
Null
Timestamp
Date - 注意点
. 创建日期语句如下:new Date(‘2019-05-24’)
. 每个文档都有一个属性,为_id(类型为objectID),保证每一个文档的唯一性
. objectID是一个12字节的十六进制数
前4个字节为当前时间戳
接下来3个字节为机器ID
接下来2个字节为MongDB的服务进程id
最后3个字节是简单的增量值
mongodb插入数据
- db.collection.insert({}) 插入数据,
_id
存在就报错 - db.collection.save({}) 插入数据,
_id
存在会更新
mongodb更新操作
db.collection.update({"name":"a"},{"name":"b"})
把name为a的数据替换为{"name":"b"}
db.collection.update({"name":"a"},{$set:{"name":"b"}})
把name为a的数据name值更新为"b"
db.collection.update({"name":"a"},{$set:{"name":"b"}},{multi:true})
{multi:true}
达到更新多条的目的
mongodb删除
db.collection.remove({name:"a"},{justOne:true})
- 默认情况下会删除所有满足条件的数据
mongodb查询
- 数据查询
- db.集合名称.find({条件文档})
- 查询只返回第一个
db.集合名称.findOne({条件文档}) - 将结果格式化
db.集合名称.find({条件文档}).pretty()
- 比较运算符
- 小于:$lt
- 小于等于:$lte
- 大于:$gt
- 大于等于:$gte
- 不等于:KaTeX parse error: Expected '}', got 'EOF' at end of input: …合名称.find({age:{gte:18}})
- 范围运算符
- 使用"
i
n
"
,
"
in","
in","nin"判断是否在某个范围内
db.集合名称.find({age:{$in:[18,28,38]}})
- 逻辑运算符
- and
- or:使用KaTeX parse error: Expected '}', got 'EOF' at end of input: … db.集合名称.find({or:[{“age”:{$ft:18}},{gender:“male”}])
- 思考:先或后与怎么写?
- limit和skip
- db.stu.find().skip(10).limit(20)
做分页
- 自定义查询
- db.stu.find({$where:function(){
return this.age>30;
}})
注:函数是js代码
- 投影
- db.集合名称.find({},{字段名称:1,…})
- 参数为字段与值,值为1表示显示,值为0不显示
- 特殊:对于_id列默认是显示的,不显示需要设置为0
- 排序
- db.集合名称.find().sort({字段:1,…})
- 参数1为升序排列,-1为降序排列
- 统计个数
- db.stu.find({gender:true}).count()
- db.stu.count({age:{$gt:20},gender:true})
- 消除重复
- db.集合名称.distinct(‘去重字段’,{条件})
- 使用正则
- db.posts.find({post_text:{$regex:“runoob”}})
- db.posts.find({post_text:/runoob/})
mongodb备份恢复
- 备份语法:
- mongodump -h dbhost -d dbname -o dbdirectory
-h: 服务器地址,也可以指定端口号
-d: 需要备份数据库名称
-o: 备份的数据存放位置,此目录中存放着备份出来的数据
- 恢复语法:
- mongorestore -h dbhost -d dbname --dir dbdirectory
-h: 服务器地址,也可以指定端口号
-d: 需要恢复的数据库实例
-o: 备份数据所在位置
mongodb聚合命令
- 聚合 db.集合名称.aggregate({管道:{表达式}})
- 常用管道
- $group:将集合中的文档分组,可用于统计结果
- $match:过滤数据,只输出符合条件的文档
- $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
- $sort:将输入文档排序后输出
- $limit:限制聚合管道返回的文档数
- $skip:跳过指定数量的文档,并返回余下的文档
- $unwind:将数组类型的字段进行拆分
- group by null
- 将集合中所有文档分为一组
- 求学生总人数、平均年龄
db.stu.aggregate( { $group:{ _id:null, counter:{$sum:1}, avgAge:{$avg:'$age'} } } )
注意点:
- $group
对应的字典中有几个键,结果中就有几个键
- 分组依据需要放到_id
后面
- 取不同的字段的值需要使用
,
‘
,`
,‘gender,
a
g
e
‘
−
取
字
典
嵌
套
的
字
典
中
的
值
的
时
候
‘
age` - 取字典嵌套的字典中的值的时候`
age‘−取字典嵌套的字典中的值的时候‘_id.country- 能够同时按照多个键进行分组
{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup:{country:"country",province:"$province"}}- 结果是:
{_id:{country:"",province:""}}`
4. $project
- 查询男生、女生人数
db.stu.aggregate( {$group:{_id:'$gender',counter:{$sum:1}}}, {$project:{_id:0,counter:1}} )
- $match
- 查询年龄大于20的男生、女生人数
db.stu.aggregate( {$match:{age:{$gt:10}}}, {$group:{_id:'$gender',counter:{$sum:1}}} )
- $sort
- 查询男生、女生人数,按人数降序
db.stu.aggregate(
{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:'gender’,counter:{KaTeX parse error: Expected 'EOF', got '}' at position 6: sum:1}̲}}, {sort:{counter:-1}}
)
- 注意先写skip,后写limit
- $unwind
- db.t2.aggregate({_id:1,item:‘t-shirt’,size:[‘S’,‘M’,‘L’]})
db.t2.aggregate({ u n w i n d : ′ unwind:' unwind:′size’})
mongodb索引
- 作用:提升查询速度
- 语法:db.集合.ensureIndex({属性:1}),1表示升序,-1表示降序
具体操作:
db.t255.ensureIndex({name:1})
db.t1.find({name:‘test10000’}).explain(‘executionStats’)
linux下将其设置为守护进程:
- /home/mongodb-linux-x86_64-rhel62-3.2.3/bin/mongod --dbpath /home/mongodb --logpath=/home/mongodb/rs2.1.log --fork
- 45上的命令:/usr/local/mongodb/bin/mongod --dbpath /data/db/ --logpath=/data/mongodblog/mongodb_error.log --fork