MongoDB数据库入门基础

MongoDB数据库

1. MongoDB介绍

MongoDB是⼀个基于分布式⽂件存储的nosql数据库。在处理⼤数据的时候会⽐MySQL更有优势。爬⾍的数据如果上了⼀个量级,可能⽤MongoDB会⽐MySQL更好

1-1. MongoDB优势

  1. ⽆数据结构限制
    • 没有表结构的概念,每条记录可以有完全不同的结构
    • 业务开发⽅便快捷
{name:'⼩明',sex:'男'}
{name:'居然',address:'东北'}
{name:'⼩红',home:[{'⼭东'},{江⻄}]}
  1. 冗余与扩展

    • 复制集保证数据安全
    • 分⽚扩展数据规模
  2. 良好的⽀持

    • 完善的⽂档
    • ⻬全的驱动⽀持

1-2. 安装

1-2-1. 在Ubuntu中安装
  1. 在Linux中安装MongoDB
sudo apt-get install mongodb
  1. 开启服务
sudo service mongodb start
  1. 关闭服务
sudo service mongodb stop
  1. 重启服务
sudo service mongodb restart

注意:
如果是系统⾮正常关闭,这样启动会报错,由于mongodb⾃动被锁上了,这是需要进⼊mongodb数据库⽂件所在的⽬录(/var/lib/mongodb/),删除⽬录中的mongodb.lock⽂件,然后再进⾏上述操作。

远程连接:

需要修改 /etc/mongodb.conf
打开⽂件:
sudo vim /etc/mongodb.conf
注释掉 bind 127.0.0.1
1-2-2. 在Windows中安装

下载网址:https://www.mongodb.com/download-center/community

安装MongoDB:https://www.cnblogs.com/chy18883701161/p/11100560.html

运行MongoDB:

  1. 把MongoDB的bin⽬录加⼊到环境变量中
  2. 执⾏命令
 mongod --dbpath D:\MongoDB\data(路径) # 启动

连接MongoDB:
在环境变量设置好的前提下,使⽤以下命令mongo就可以进⼊到mongo的操作终端了

1-3. MongoDB概念介绍

SQL概念MongoDB概念解释
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield字段/域
indexindex索引
primary keyprimary key主键

1-4. MongoDB三元素

三元素: 数据库、集合、文档

  • 文档:就是关系型数据库中的⼀⾏。⽂档是⼀个对象,由键值对构成,是json的扩展形式
{"name": "abc", "gender": 1}
  • 集合:就是关系型数据库中的表。可以存储多个⽂档,结构可以不固定。
{"name": "abc", "gender": 1}
{"name": "abc", "age": 18}
{"title": "abc", "price": 1}

2. MongoDB的基本使用

2-1. 查找数据库

show dbs

2-2. 切换数据库

use 数据库

2-3. 查看当前的数据库

db

2-4. 删除数据库

db.dropDatabase()

2-5. 创建数据库

use 数据库   // 当有数据同时存入的时候,会自动创建

2-6. 查看集合

show tables
show collections

2-7. 退出数据库

db.shutdownServer()	//下次使用需要重启服务

3. MongoDB中集合的基础命令

3-1. 注意:

不⼿动创建集合,向不存在的集合中第⼀次加⼊数据时,集合会被创建出来!!!!

3-2. 手动创建集合

db.createCollection(name,options)
  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存⼤⼩及索引的选项

db.createCollection('sub',{capped:true,size:10})
  • 参数capped:默认值为false表示不设置上限,值为true表示设置上限
  • 参数size:当capped值为true时,需要制定此参数。表示上限⼤⼩,当⽂档达到上限时,会将之前的数据覆盖,单位为字节

3-3. 查看集合

show collections

3-4. 删除集合

db.集合名称.drop()

4. MongoDB中的数据类型

  • String:字符串,必须是有效的UTF-8
  • Boolean:存储⼀个布尔值,true或者false
  • Integer:整数可以是32位或64位,这取决于服务器
  • Double:存储浮点数
  • Arrays:数组或列表
  • Object:嵌⼊式⽂档
  • Null:存储Null值Timestamp:时间戳, 表示从1970-1-1到现在的总秒数
  • Object ID是⼀个12字节的⼗六进制数
    • 前4个字节为当前时间戳
    • 接下来3个字节的机器ID
    • 接下来的2个字节中MongoDB的服务进程id
    • 最后3个字节是简单的增量值

5. MongoDB的增删改查

5-1. 命名规范

  1. 不能是空字符串
  2. 不得含有特殊字符
  3. 应全部⼩写
  4. 最多64个字节
  5. 数据库名不能与现有系统保留库同名,如admin,local

5-2. 插入数据(增)

db.集合名.insert({})  数据格式为json,id不能重复,⽀持多条插⼊数据库
db.集合名.save({数据})
5-2-1. 单条插入数据
db.name_collection.insert({x:1})
5-2-2. 多条插入数据
// 插入3<=i<10的数据
for(i=3;i<10;i++)db.name_collection.insert({x:i})

5-3. 查询数据(查)

5-3-1. 查询所有数据
db.name_collection.find({条件⽂档})
5-3-2. ⽅法pretty():将结果格式化
db.集合名称.find({条件⽂档}).pretty()
5-3-3. 查询单条数据
db.name_collection.findOne({条件⽂档})
5-3-4. 查出的数据求总数
db.name_collection.find().count()
5-3-5. limit和skip
limit⽤于读取指定数量的⽂档
db.name_collection.find().limit(2)

skip⽤于跳过指定数量的⽂档
db.name_collection.find().skip(2)

limit和skip同时使⽤
db.name_collection.find().skip(2).limit(2)
5-3-6. 映射

指定返回的字段,如果为1则返回改字段,如果为0则除了改字段外所有字段返回。id如果没写会默认返回

db.name_collection.find({},{_id:1})
5-3-7. 排序
// 按照年龄升序排序
db.name_collection().find().sort({age:1})

// 按照年龄降序排序
db.name_collection().find().sort({age:-1})
5-3-8. 带有条件的查询
// 查询x等于100的数据
db.name_collection.find({x:100})

// 查询x等于100,y等于99的
db.name_collection.find({x:100,y:99})

5-4. 修改数据(改)

db.集合名字.update({条件},{更新的数据})
db.集合名字.update({条件},{$set:{更新的数据}})
db.集合名字.update({条件},{$set:{更新的数据}},{multi:true})

5-5. 删除数据(删)

db.集合名.remove()	// 删除所有数据,索引不会删除
db.集合名.remove({x:100})	// 删除满足条件的

5-6. MongoDB常见运算符

5-6-1. 比较运算符
符号解释
等于默认是等于判断,没有运算符
$lt小于
$lte小于等于
$gt大于
$gte大于等于

查询示例:

db.集合名.find({y:{$gte:18}})  // 查询大于等于18的数据
5-6-2. 范围运算符
符号解释
$in
$nin
db.集合名.find({age:{$in:[18,28]}}) //
5-6-3. 逻辑运算符
or:使⽤$or,值为数组,数组中每个元素为json
db.集合名.find({$or:[{age:{$gt:18}},{gender:false}]})

6. MongoDB中的聚合命令

6-1. 介绍

聚合是基于数据处理的聚合管道,每个⽂档通过⼀个由多个阶段组成的管道,可以对每个阶段的管道进⾏分组、过滤等功能,然后经过⼀系列的处理,输出相应的结果。

6-2. 常用的管道

  • $group: 将集合中的文档分组,可用于统计结果
  • $match:过滤数据,只输出符合条件的⽂档
  • $project:修改输⼊⽂档的结构
  • $sort:将输⼊⽂档排序后输出
  • $limit:限制聚合管道返回的⽂档书
  • $skip:跳过指定数量的⽂档,并返回余下的⽂档

6-3. 表达式

语法: 表达式:'$列名'

常用表达式:

  • $sum: 计算总和, $sum:1 表示以⼀倍计数
  • $avg: 计算平均值
  • $min: 获取最⼩值
  • $max: 获取最⼤值
  • $push: 在结果⽂档中插⼊值到⼀个数组中
  • $first: 根据资源⽂档的排序获取第⼀个⽂档数据
  • $last: 根据资源⽂档的排序获取最后⼀个⽂档数据

6-4. $group

作用: 将集合中的⽂档分组,常⽤于统计结果

_id表示分组的依据,使⽤某个字段的格式为 ‘$字段

代码示例:

// 按照gendr分组
db.students.aggregate(
	{$group:{_id:'$gender', count:{$sum:1}}}
)

// 按照gender分组,获取不同组的平均年龄
db.students.aggregate(
	{$group:{_id:'$gender',count:{$sum:1}, avg_age:{$avg:'$age'}}}
)

6-5. match

// match是管道命令,能将结果交给后一个管道,但是find不行

// 查询年龄大于20的学生
db.students.aggregate(
	{$match:{age:{$gt:20}}}
)

// 查询年龄大于20的男生,女生人数
db.students.aggregate(
	{$match:{age:{$gt:20}}},
	{$group:{_id:'$gender',count:{$sum:1}}}
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值