【MogoDb】MogoDb数据库初识

一、MongoDB简介

1.1概念

​ MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

​ MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

1.2与关系型数据库的区别

​ 它和我们使用的关系型数据库最大的区别就是约束性,可以说文件型数据库几乎不存在约束性,理论上没有主外键约束,没有存储的数据类型约束等等。关系型数据库中有一个 "表" 的概念,有 "字段" 的概念,有 "数据条目" 的概念。MongoDB中也同样有以上的概念,但是名称发生了一些变化,严格意义上来说,两者的概念即为相似,但又有些出入,不过无所谓,我们就当是以上概念就好啦。

1.3图解数据库表结构

​ MongoDB的每个表(Collection)中存储的每条数据(Documents)都是一个一个的Json,Json中的每一个字段(Key)我们称之为:Field

​ 就此我们引出了三个关键字,Collection也就是关系型数据库中"表"的概念,Documents就是"数据条目",Field就是"字段"

二、MongoDB安装部署

1、安装包的下载

https://www.mongodb.com/
products---->SOFRWARE---->Mogodb Server---->Download the latest release---->server---->选择版本、安装包、系统进行下载

2、安装 一直next

custom # 自定义安装

3、配置

D:\software\mogodb\bin  #我的环境变量

3、新建文件夹

D:\software\mogodb\data\db #不写会报错,路径随便写

4、启动客户端

mongod --dbpath  D:\software\mogodb\data\db

5、服务端登录

mongo

三、数据库的操作

​ MongoDB中如果你使用了不存在的对象,那么就等于你在创建这个对象哦

3.1表的操作

db -- 当前使用的数据库 查看名称,代指当前使用的数据库
show databases -- 查看当前服务器磁盘上的所有数据库
use dbname -- 切换当前使用的数据库 或者在内存中创建一个新的数据库 赋值给 db
show tables -- 查看当前数据库中所有磁盘中的表
db.tablename -- 使用当前数据库中的tablename表 在内存中创建表

3.2数据的增、删改查操作

1、增加 insert

insert:
插入一条数据:
db.book.insert({name:'三国演义'}) #插入数据,field可以不加引号,以后少用
db.book.insertOne({name:'三国演义'})#推荐 必须写字典,
插入多条数据
db.book.insert([{name:'睡觉',age:'19'},{"anmial":"dog"}])#以后少用
db.book.insertMany([{name:'睡觉',age:'19'},{"anmial":"dog"}]) #推荐,必须是列表套字典

2、删除

#官方不推荐
db.book.remove({}) #无条件删除数据,这里要注意了,这是删除所有数据,清空Collection
db.book.remove({name:'三国演义'}) 
#官方推荐:
3.2
db.tablename.deleteOne() # 删除符合条件的第一条数据
db.tablename.deleteMany() # 删除所有符合条件的数据

3、改 update

#语法
db.book.update({},{$set:{"price":21}}) #查询条件的结果多条,默认修改第一条
db.book.updateOne({},{$set:{"price":21}}) #推荐
db.book.updateMany({name:'睡觉'},{$set:{"price":30}}) #查询条件的结果多条,修改多条没有price就会创建一个price字段

4、查 find

db.book.find() #无条件查找:将该表(Collection)中所有的数据一次性返回
#3.2之后加入的
db.book.findOne() #无条件查找一条数据,默认数据库的第一条数据 返回值是json
db.book.findOne({age:'19'}) #查找一条age等于19的数据,如有多条数据则返回更靠前的数据

四、关键字及修改器

4.1数学比较符

1、大于gt

db.student.find({age:{$gt:21}})

2、大于等于gte

db.student.find({age:{$gte:21}})

3、小于lt

db.student.find({age:{$lt:21}})

4、小于等于lte

db.student.find({age:{$lte:21}})

5、等于

db.student.find({age:21})
db.student.find({age:{$eq:21}})

6、不等于

db.student.find({age:{$ne:21}})

4.2与update相关的装饰器

1、$inc 变量+1

db.student.update({name:"小兰"},{$inc:{age:20}})#自增值可以自己设定

2、.$set 没有就自动添加一条

db.student.update({name:"小兰"},{$set:{hobby:'hj'}})

3、$unset 用来删除Key(field)的

db.student.update({name:"小兰"},{$unset:{age:1}})

4、push 、pushAll

它是用来对Array (list)数据类型进行 增加 新元素的,相当于我们大Python中 list.append() 方法

db.student.update({name:"小兰"},{$set:{arry:[]}})
db.student.update({name:"小兰"},{$push:{arry:555}})
db.student.update({name:"小兰"},{$pushAll:{arry:[555,22,33]}})#迭代添加

5、pull、pullAll

$pull 就是指定删除Array中的某一个元素,如果多个条件满足,全部删除

db.student.update({name:"小兰"},{$pull:{arry:222}})
db.student.update({name:"小兰"},{$pullAll:{arry:[555,33]}})#迭代删除

6、pop

指定删除Array中的第一个 或 最后一个 元素

db.student.update({name:"小兰"},{$pop:{arry:1}}) #删除最后一个
db.student.update({name:"小兰"},{$pop:{arry:-1}}) #删除第一个

4.3$的特殊用法

db.student.update({name:"小兰"},{$set:{"arry.1":50}}) #,"arry.1"加引号
db.student.update({name:"小兰",arry:3333},{$set:{"arry.$":80}}) #将3333改成了80

4.4 and、or、all、in

1、and 并列查询

db.student.find({name:"小兰",age:30})
db.student.find({$and:[{name:"小兰"},{age:"30"}]})

2、或条件查询

db.student.find({$or:[{name:"小兰"},{age:30}]})

3、子集查询$all

db.student.find({"arry":{$all:[111,50,80]}})#只要arry包含[111,50,80]就可以找到

4、范围查找

db.student.find({name:{$in:["小明","小兰"]}})

五、Array Object的特殊操作

1、实例一

1、数据准备
db.student.insert(
{   
		"name" : "雷人",
    "price" : [
        19800,
        19500,
        19000,
        18800
    ],
    "other" : {
        "start" : "2018年8月1日",
        "start_time" : "08:30",
        "count" : 150
    }
})
2、把price 中 19000 改为 19300
db.student.update({name:'雷人',price:19000},{$set:{"price.$":500}})
2、混合用法
db.student.update({name:"雷人","price.2":{$lt:1000}},{$inc:{"price.$":500}})
#price.2的值小于1000,将会自动加上500
3、把other中 count 改为 199
db.student.update({name:"雷人"},{$set:{"other.count":199}})
4混合用法
db.student.update({name:"雷人","other.count":{$lt:200}},{$inc:{"other.count":1}})

2、实例二

1、数据准备
db.student.insert({
    "_id" : ObjectId("5b17de9d44280738145722b9"),
    "name" : "火箭队",
    "price" : [
        {
            "start" : "2018年8月1日",
            "start_time" : "08:30",
            "count" : 150
        },
        {
            "start" : "2018年8月2日",
            "start_time" : "09:30",
            "count" : 160
        },
        {
            "start" : "2018年8月3日",
            "start_time" : "10:30",
            "count" : 170
        },
        {
            "start" : "2018年8月4日",
            "start_time" : "11:30",
            "count" : 180
        }
    ]
})
2、把count 大于 175 的field  加 15
db.student.update({name:"火箭队",'price.count':{$lt:175}},{$inc:{'price.$.count':15}})
3、把 count 大于 180 的 start 改为 "2018年8月10日"
db.student.updateMany({name:"火箭队",'price.count':{$gt:175}},{$inc:{'price.$.starttime':"2018年9月13日"}})  
 #只更改第一个
 代码解析:
 {"price.count":{$gt:175}}, price 明明是个 Array 啊 怎么就直接 打点儿 count 了呢 这里要知道price 打点儿 就是从内部的Object 中找到 count 小于 175 的结果

{$inc:{"price.$.count":15}} ,  这里就比较好理解了,price里面第 $ (大于175的第一个) 个元素中 count 增加 15
    
补充:
    $只能存储一个下表

六、limit sort skip

1、limit/sort/skip的简单用法

db.student.find().limit(2) # 取前2条
db.student.find().skip(2)	#跳过前2条
db.student.find().sort({"age":1}) #排序从小到大,-1从大到小

2、两两组合用法

db.student.find().limit(2).skip(1)
db.student.find().skip(1).limit(2)
#以上两中用法的结果是等效的

3、limit sort skip三者组合用法

db.student.find().skip(1).limit(2).sort({age:1})
#Sort + Skip + Limit 是有执行优先级的 他们的界别分别是 优先 Sort  其次 Skip 最后limit
#Limt Skip + Limit 的优先级 也是先 Skip 再 Limit
posted @ 2019-07-18 08:26  与凯学习  阅读(365)  评论(0编辑  收藏  举报