文章目录:
2. mongodb基本操作:增删改查,高级查询,备份恢复
2.1 数据库操作,集合操作,数据类型
2.2 数据库的增删改查
插入,保存,查询,更新,删除
2.3 数据库的高级查询
数据查询,比较运算符,逻辑运算符,范围运算符,支持正则表达式,limit和skip,自定义查询(支持js语法),投影,排序,统计个数
一 、mongdb介绍和安装启动
1.1 mongodb介绍
-
“NoSQL”⼀词最早于1998年被⽤于⼀个轻量级的关系数据库的名字
-
随着web2.0的快速发展, NoSQL概念在2009年被提了出来
-
NoSQL在2010年⻛⽣⽔起, 现在国内外众多⼤⼩⽹站, 如facebook、 google、 淘宝、 京东、 百度等, 都在使⽤nosql开发⾼性能的产品
-
对于⼀名程序员来讲, 使⽤nosql已经成为⼀条必备技能
-
NoSQL最常⻅的解释是“non-relational”, “Not Only SQL”也被很多⼈接受, 指的是⾮关系型的数据库
1.2 mongodb优势
-
易扩展: NoSQL数据库种类繁多, 但是⼀个共同的特点都是去掉关系数据库的关系型特性。 数据之间⽆关系, 这样就⾮常容易扩展
-
⼤数据量, ⾼性能: NoSQL数据库都具有⾮常⾼的读写性能, 尤其在⼤数据量下, 同样表现优秀。 这得益于它的⽆关系性, 数据库的结构简单
-
灵活的数据模型: NoSQL⽆需事先为要存储的数据建⽴字段, 随时可以存储⾃定义的数据格式。 ⽽在关系数据库⾥, 增删字段是⼀件⾮常麻烦的事情。 如果是⾮常⼤数据量的表, 增加字段简直就是⼀个噩梦
1.3 mongodb 安装
linux: sudo apt-get install -y mongodb-org
- 解压:tar -zxvf xxx.tgz
- 移动到/usr/local目录下:sudo mv -r ABC/ /usr/local/mongo
- 将可执行文件添加进PATH路径中:export PATH=/usr/local/mongodb/bin:$PATH
1.4 服务端Mongodb启动
# 启动:sudo service mongodb start
# 停止: sudo service mongodb stop
# 重启: sudo service mongodb restart
# 查看是否启动成功:ps ajx|grep mongodb
# 默认端口:27017
# 查看帮助:mongodb -help
# 日志位置:/var/log/mongodb/mongodb.log
二、mongodb基本操作:增删改查,高级查询,备份恢复
2.1数据库操作,集合操作,数据类型
2.1.1 数据库操作
# 查看当前数据库:db
# 查看所有的数据库: show dbs /show databases
# 切换数据库:use db_name
# 删除当前的数据库:db.dropDatabase()
2.1.2 集合操作
# 插入数据,默认创建集合
# 查看集合: show collections
# 删除集合:db.集合名称.drop()
# 手动创建集合
# db.createCollection(name, options)
# db.createCollection('demo', {capped:true, size:100})
# 参数capped: 默认false,表示size没有上限
# 参数size: 需设置capped为True,size单位为字节,如先进先出队列形式
2.1.3 数据类型
Object ID: ⽂档ID
String: 字符串, 最常⽤, 必须是有效的UTF-8
Boolean: 存储⼀个布尔值, true或false
Integer: 整数可以是32位或64位, 这取决于服务器
Double: 存储浮点值
Arrays: 数组或列表, 多个值存储到⼀个键
Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
Null: 存储Null值
Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
Date: 存储当前⽇期或时间的UNIX时间格式
2.2 数据库的增删改查
# 先向数据库插入数据:
use stu
db.stu.insert({"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true })
db.stu.insert({"name" : "⻩蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false })
db.stu.insert({"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false })
db.stu.insert({"name" : "⻩药师", "hometown" : "桃花岛", "age" : 40, "gender" : true })
db.stu.insert({"name" : "段誉", "hometown" : "⼤理", "age" : 16, "gender" : true })
db.stu.insert({"name" : "段王爷", "hometown" : "⼤理", "age" : 45, "gender" : true })
db.stu.insert({"name" : "洪七公", "hometown" : "华⼭", "age" : 18, "gender" : true })
# 1.插入
# db.集合名称.insert(document)
# db.stu.insert({name:'gj',gender:1})
# db.stu.insert({_id:"20170101",name:'gj',gender:1})
# 插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
# 2.保存
# db.集合名称.save(document)
# 如果⽂档的_id已经存在则修改, 如果⽂档的_id不存在则添加
# compare(对比) insert()中,_id存在就报错
# 3.查询
# db.集合名称.find()
# 4.更新
# db.集合名称.update(<query> ,<update>,{multi: <boolean>})
# 参数query:查询条件
# 参数update:更新操作符
# 参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
# db.stu.update({name:'hr'},{name:'mnc'}) 更新一条
# db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一条
# db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部
# 注意:"multi update only works with $ operators"
# 5.删除
# db.集合名称.remove(<query>,{justOne: <boolean>})
# 参数query:可选,删除的⽂档的条件
# 参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
2.3 数据库的高级查询
1.数据查询
⽅法find(): 查询
db.集合名称.find({条件⽂档})
⽅法findOne():查询,只返回第⼀个
db.集合名称.findOne({条件⽂档})
⽅法pretty(): 将结果格式化
db.集合名称.find({条件⽂档}).pretty()
2.比较运算符
-
等于: 默认是等于判断, 没有运算符
-
⼩于:$lt (less than)
-
⼩于等于:$lte (less than equal)
-
⼤于:$gt (greater than)
-
⼤于等于:$gte
-
不等于:$ne
-
eg:db.stu.find({age:{$gte:18}})
3.逻辑运算符
-
and:在json中写多个条件即可
查询年龄⼤于或等于18, 并且性别为true的学⽣
db.stu.find({age:{$gte:18},gender:true})
-
or:使⽤$or, 值为数组, 数组中每个元素为json
查询年龄⼤于18, 或性别为false的学⽣
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
-
例子:查询年龄⼤于18或性别为男⽣, 并且姓名是郭靖
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
4.范围运算符
- 使⽤" i n " , " in", " in","nin" 。
- eg:判断是否在某个范围内查询年龄为18、 28的学生。
db.stu.find({age:{$in:[18,28]}})
5.支持正则表达式
- 使⽤//或$regex编写正则表达式
- eg:查询姓⻩的学⽣,
db.stu.find({name:/^⻩/})
或者 db.stu.find({name:{$regex:’^⻩’}})
6.limit和skip
-
⽅法limit(): ⽤于读取指定数量的⽂档
db.集合名称.find().limit(NUMBER)
eg:查询2条学⽣信息:
db.stu.find().limit(2)
-
⽅法skip(): ⽤于跳过指定数量的⽂档
-
db.集合名称.find().skip(NUMBER),
db.stu.find().skip(2)
-
同时使用,db.stu.find().limit(4).skip(5) 或
db.stu.find().skip(5).limit(4)
,推荐skip().limit()更快速。
7.自定义查询(支持js语法)
-
使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据
查询年龄⼤于30的学⽣
db.stu.find({ $where:function() { return this.age>30;} })
8.投影
-
在查询到的返回结果中, 只选择必要的字段
db.集合名称.find({},{字段名称:1,…})
参数为字段与值, 值为1表示显示, 值为0不显(除了
_id
之外的其他字段,如果不显示,不写,不能写为0)特殊: 对于_id列默认是显示的, 如果不显示需要明确设置为0
eg:
db.stu.find({},{_id:0,name:1,gender:1})
9.排序
-
db.集合名称.find().sort({字段:1,…}),参数1为升序排列,-1为降序
eg:根据性别降序, 再根据年龄升序,
db.stu.find().sort({gender:-1,age:1})
10.统计个数
-
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
eg:
db.stu.find({gender:true}).count()
eg:
db.stu.count({age:{$gt:20},gender:true})
11.消除重复(不改变collections)
-
db.集合名称.distinct(‘去重字段’,{条件})
eg:db.stu.distinct('hometown',{age:{$gt:18}})
2.4 数据库的备份和恢复
1.备份
备份的语法:
mongodump -h dbhost -d dbname -o dbdirectory
-h: 服务器地址, 也可以指定端⼝号
-d: 需要备份的数据库名称
-o: 备份的数据存放位置, 此⽬录中存放着备份出来的数据
mongodump -h 192.168.196.128:27017 -d test1 -o
2.恢复
恢复语法:
mongorestore -h dbhost -d dbname --dir dbdirectory
-h: 服务器地址
-d: 需要恢复的数据库实例
–dir: 备份数据所在位置
mongorestore -h 192.168.196.128:27017 -d test2 --dir ~/Desktop/test1bak/test1