初识MongoDB

MongoDB是什么?

首先基于文档组成集合构成的一个NoSQL数据库
数据库中最基础的组成就是一个个Bson文档
Bson就是json的扩展 增加了时间格式和浮点的数据支持
因为没有了数据库表的概念所以也就没有了SQL命令式的查询或者联表查询了
默认端口27017
在MongoDB中,多个文档组成集合,而多个集合可以组成数据库。一个MongoDB实例可以承载多个数据库,每个数据库拥有0个或者多个集合。每个数据库都有独立的权限。
数据库命名可以是满足以下条件的任意UTF-8字符串:

  • 不能是空字符串
  • 不得含有/、\、.、”、*、<、>、:、|、?、$(一个空格)、\0(空字符)。
  • 数据库名应全部小写。
  • 数据库名最多为64字节。
  • 不能使用admin、local、config,这些数据库名是保留的

然后看一下百度百科的解释:
MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

特点

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
mongodb集群参考
mongodb集群参考
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性。
*支持 Golang,RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
*文件存储格式为BSON(一种JSON的扩展)。
*可通过网络访问。

与sql型数据库对比

在这里插入图片描述

基本命令

1、库操作
show dbs 显示全部数据库
db 显示当前数据库
use db_name 创建数据库,如果已经存在则进入
db.dropDatabase() 删除所在数据库
表操作:
db.createCollection(name, options) 创建表
db.collection_name.drop() 删除表,db后面跟表名
行操作:
db.collection_name.insert(document) 插入
db.collection_name.updata(,) 修改
例子:
db.student.insert({“name”:“wei”,“age”:10})

例子:
db.student.update({“name”:“wei”},{“name”:“wang”,“age”:10})//更新所有字段
db.student.update({“name”:“wei”},{KaTeX parse error: Expected 'EOF', got '}' at position 29: …wang","age":10}}̲,{multi:true})/…set只更新某个字段,multi:false表示更新第一个匹配的文档,true表示更新所有匹配的文档。
删除行
db.student.remove() query:删除条件,相当于sql语句中的where
例子:
db.student.remove({})//删除所有行
db.student.remove({“name”:“wang”})//删除指定行
查询行
db.collection.find(query, projection) query:查询条件,可不填,
例子
db.student.find()``//查询全部
db.student.find({“name”:“wang”})//条件查询
db.student.find({“name”:“wang”},{name:1,age:1,_id:0})//只显示name和age

缺点及特性

mongodb数据文档特性

1)不建立索引查询太慢;

2)索引太多影响写入及更新操作;

3)当表数据量上亿查询以及写入速度性能较差;

4)mongodb换节点时候会有短暂的不可写设计限制,当出现任何时间写入不能停的场景,mongodb可能不太合适;

5)mongodb的读写2000-3000/s;

6)mongodb适合需要大量的地理位置查询;

7)mongodb不适合数据对象过多。

8)mongodb 单个文档的bson size不能超过16mb的限制;

9)批量插入的时候bson size不能超过48mb,如果超过,驱动程序自动修改为mongodb的多次提交;

10)查询时索引位置的无顺序性;

11)_id索引无法删除;

12)杀掉mongodb进程方式:db.shutdownserver()

13)mognodb集群的副本数据不能太多。mognodb3.0超过了50个,失去故障自恢复功能,主节点故障,需要手动去切换到无故障节点;

14)索引字段的长度不能大于1024字节;
摘抄自:https://blog.csdn.net/llp223/article/details/102072811
可能之后还是会验证一下

配置文件介绍

在安装完成后的 bin目录中对应的mongodb.conf文件

    dbpath=/usr/local/mongodb/db
    logpath=/usr/local/mongodb/logs/mongodb.log
    port=27017
    fork=true
    nohttpinterface=true

参数解释:

--dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)--logappend 日志文件末尾添加,即使用追加的方式写日志
--journal 启用日志
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
--syncdelay 数据写入硬盘的时间(秒),0是不等待,直接写入
--notablescan 不允许表扫描
--maxConns 最大的并发连接数,默认2000  
--pidfilepath 指定进程文件,不指定则不产生进程文件
--bind_ip 绑定IP,绑定后只能绑定的IP访问服务

分页

Limit返回指定的数据条数
1.1 查询出persons文档中前5条数据
db.persons.find({},{_id:0,name:1}).limit(5)
Skip返回指定数据的跨度
2.1 查询出persons文档中5~10条的数据
db.persons.find({},{_id:0,name:1}).limit(5).skip(5)
Sort返回按照年龄排序的数据[1,-1]
db.persons.find({},{_id:0,name:1,age:1}).sort({age:1})
注意:mongodb的key可以存不同类型的数据排序就也有优先级

Limit和Skip完成分页
4.1三条数据位一页进行分页
第一页->db.persons.find({},{_id:0,name:1}).limit(3).skip(0)
第二页->db.persons.find({},{_id:0,name:1}).limit(3).skip(3)

分组

1、count
请查询persons中美国学生的人数.
db.persons.find({country:”USA”}).count()
2、distinct
请查询出persons中一共有多少个国家分别是什么.
db.runCommand({distinct:”persons“ , key:”country”}).values
3、group
语法:

db.runCommand({group:{
ns:集合名字,
Key:分组的键对象,
Initial:初始化累加器,
$reduce:组分解器,
Condition:条件,
Finalize:组完成器
}})
例:
3.1请查出persons中每个国家学生数学成绩最好的学生信息(必须在90以上)

db.runCommand({group:{
    ns:"persons",
    key:{"country":true},
    initial:{m:0},
    $reduce:function(doc,prev){
        if(doc.m > prev.m){
        prev.m = doc.m;
        prev.name = doc.name;
        prev.country = doc.country;
    }
    },
    condition:{m:{$gt:90}}
}}) 

3.2 在3.1要求基础之上吧没个人的信息链接起来写一个描述赋值到m上
finalize:function(prev){
prev.m = prev.name+" Math scores "+prev.m
}

4、 用函数格式化分组的键
如果集合中出现键Counrty和counTry同时存在那分组有点麻烦这要如何解决呢?
$keyf:function(doc){
return {country:doc.counTry}
},…

索引 索引管理 空间索引 固定集合 GridFS存储文件 导入导出 Fsync锁 用户管理,安全认证 主从复制 副本集 分片

接下来详细通过
https://blog.csdn.net/shuaicihai/article/details/72803592
这篇博客在好好学习一下吧 感觉好深的坑啊 看一下今后的工作需要把 如果不是必须的 优先学习Redis 如果有工作需要再来加深对MongoDB的底层认知

学习自:
https://baike.baidu.com/item/mongodb/60411?fr=aladdin
https://blog.csdn.net/claroja/article/details/90692760
https://blog.csdn.net/shuaicihai/article/details/72803592
https://www.runoob.com/mongodb/mongodb-tutorial.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值