一、Mongodb介绍(概述和安装)和基本操作(增删改查,高级查询,备份恢复)

文章目录:

1. mongdb介绍和安装启动

2. mongodb基本操作:增删改查,高级查询,备份恢复
2.1 数据库操作,集合操作,数据类型

2.2 数据库的增删改查
    插入,保存,查询,更新,删除

2.3 数据库的高级查询
    数据查询,比较运算符,逻辑运算符,范围运算符,支持正则表达式,limit和skip,自定义查询(支持js语法),投影,排序,统计个数

2.4 数据库的备份和恢复

一 、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 &quot; , &quot; in&quot;, &quot; 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值