MongoDB数据库的概述和基本使用

目录 1. MongoDB是什么? 2. 为什么需要学习? 3. MongoDB的特点? 4.安装 5.基本命令 6.insert() 7.save

目录

1. MongoDB是什么?

2. 为什么需要学习?

3. MongoDB的特点?

4.安装

5.基本命令

6.insert()

7.save()

8.基本查询

9.聚合查询,排序,映射

10.修改

11.删除

12.创建索引


1. MongoDB是什么?

MongoDB是一个非关系型数据库(No sql)

2. 为什么需要学习?

  • 企业需求

  • 爬虫爬取数据到一个量级 使用MongoDB比mysql好一些

3. MongoDB的特点?

  • 无数据结构 (方便爬虫)

  • 高性能(具有非常高的读写能力)

  • 良好支持(完善文档,跨平台 ,稳定)

4.安装

  1. 下载安装文件(msi, 自己下载 用老师的)

  2. 安装

  3. 把bin目录添加到path环境变量里(C:\Program Files\MongoDB\Server\4.2\bin)

启动 MongoDB

mongodb --dbpath C:\Program Files\MongoDB\Server\4.2\data

连接MongoDB

mongo

5.基本命令

show dbs   展示数据库
cls 清屏命令
use admin  使用数据库/创建数据库
db   查看当前在使用的数据库
show collections / show tables 查看当前使用数据库的集合(表)
db.dropDatabase()  删除当前使用的数据库

6.insert()

Collection 集合 ---> 表

Document文档 ---> 一行数据

不手动创建表(当没有这个表的时候,插入一条数据 表自动创建)

  • db.mark.insert({x:1})

手动创建表

db.createCollection(name,options)

  • name:创建的集合名称
  • options:是一个文档,指定集合的配置
  • capped: Boolean类型 默认False 没有设置上限 True 有上限
  • size: number 表示设置上限的大小 字节 如果你设置的大小<256 , 默认为256
  • max: number 指定上限集合中允许的最大文档数量
db.createCollection('mark1')
db.createCollection('mark1',{capped:true,size:5000,max:4})
​
db.mark.isCapped() 检测当前集合有没有设置上限   false 没有   true 有
db.mark1.drop()    删除集合(表)
​
​
插入多条数据
db.mark1.insert([{name:'mark',age:18,sex:'male'},{name:'amy'}])  # 注意[]
for(i=3;i<10;i++)db.mark1.insert({x:i})
​
db.createCollection('mark1')
db.createCollection('mark1',{capped:true,size:5000,max:4})
​
db.mark.isCapped() 检测当前集合有没有设置上限   false 没有   true 有
db.mark1.drop()    删除集合(表)
​
​
插入多条数据
db.mark1.insert([{name:'mark',age:18,sex:'male'},{name:'amy'}])  # 注意[]
for(i=3;i<10;i++)db.mark1.insert({x:i})
​

7.save()

# 指定_id ,找到就更新,反之就插入
db.mark1.save({_id:1,name:'amy'})  
db.mark1.save({name:'amy'})

8.基本查询

# 基本查询
db.mark1.find({name:'mark'})  # 精确查询
db.mark1.find({name:'mark'}).pretty()   # 以格式化的方式显示结果
​
db.mark1.findOne({age:18})   # 符合条件第一条数据
db.mark1.findOne({age:18,id:1})  # 多条件查询
​
​
# 基本符号
$gt : > 
$lt : < 
$gte: >= 
$lte: <= 
$ne : !=、$amp;$in : in 
$nin: not in 
$all: all 
$not: 反匹配(1.3.3及以上版本)
​
# 定义方法查询  
db.mark1.find({$where:function(){return this.age>18}})
​
逻辑与或
> db.user.find({"name":"xiaolan"})
​
> db.user.find({"name":"xiaolan","hobby":["song1","writebook"]})  --- 直接写多个,中间以,隔开
> db.user.find({$or:[{"name":"xiaolan"},{"age":"10"}] })   --或:以$or开头,后面跟的是[]  
db.mark1.find({$and:[{age:{$gt:18}},{home:'长沙'}]})
db.mark1.find({$or:[{age:{$gt:18}},{home:'长沙'}]})
​
​
# 模糊查询
> db.user.distinct('name');   --去掉重复数据
> db.user.find({name:/ao/})   --模糊查询    注意:必须有{}
> db.user.find({name:/^ao/})  --模糊查询    以ao开头
> db.user.find({name:/ao$/})  --模糊查询    以ao结尾
​

9.聚合查询,排序,映射

# 查看集合里数据个数
db.mark9.find().count()
db.mark9.count()
​
# 查看符合条件数据个数
db.mark9.find({age:18}).count()
db.mark9.count({age:18})
​
# 查看前几条数据  限制个数  不分负号
db.mark9.find().limit(2)
db.mark9.find().limit(-2)
​
# 跳过
# 先跳过2条数据,在返回满足结果的前2条数据
db.mark9.find().skip(2).limit(2)
​
​
# 映射 : 返回指定的字段,相当于SQl的Select
# 如果为1返回该字段  _id:0
# 只显示age字段
db.mark9.find({},{age:1})
db.mark9.find({},{age:1,_id:0})
​
​
# 排序
db.mark9.find().sort({age:1})    # 按照年龄升序
db.mark9.find().sort({age:-1})   # 按照年龄降序

10.修改

db.集合名.update()

  1. query :查询条件

  2. update: 更新的内容

  3. multi: 默认是false 表示只更新第一个符合条件的数据 true 把所有满足条件数据全部更新

 db.mark9.update({name:'mark'},{name:'马克'})  # 正常更新,但是后面数据不保留db.mark9.update({name:'张三'},{$set:{name:'罗翔'}})  # 指定键值更新 保留其余数据db.mark9.update({sex:'女'},{$set:{sex:0}},{multi:true})

11.删除

db.mark1.drop()
​
db.mark1.remove()   # 删除全部
db.mark9.remove({age:18},{justOne:true})  # 删除满足条件一个数据
db.mark9.remove({age:18},{justOne:1})  # 删除满足条件一个数据
db.mark9.remove({age:18},{justTwo:true})
​
db.mark9.remove({age:18},{justThree:true})
......
= db.mark9.remove({age:18})

12.创建索引

目的:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

# 创建索引前
db.test.find({name:'test9999'})
db.test.find({name:'test9999'}).explain('executionStats')  # 39ms
​
# 创建索引
db.test.ensureIndex({name:1})
# 创建索引后
db.test.find({name:'test9999'}).explain('executionStats')  # 7ms
​
# 删除索引
db.test.dropIndex({name:1})

默认情况_id是集合的索引

查看集合索引 db.集合名.getIndexes()