Mongo数据库

一、概述

Mongo是一个非关系型数据库,由C++语言编写。

数据库类型说明
关系型数据库由关系模型(二维表格)组织数据的数据库
非关系型数据库由键值对组织数据的数据库

二、数据组织形式

在这里插入图片描述

{
	"_id": NumberLong(17506),
	"name": "ZhangSan",
	"age": 20,
	"Job": "Student",
}
{
	"_id": NumberLong(17507),
	"name": "LiSi",
	"age": 35,
	"Job": "Doctor",
}

三、语法

1、进入mongo数据库

$ mongo

2、展示所有数据库(如果某数据库没有数据,那么它将不会被展示出来)

> show dbs

3、连接数据库,如果不存在该数据库,则创建数据库

> use <数据库名>

4、显示当前连接的数据库或者集合

> db

5、在当前数据库中创建一个集合

> db.createCollection("<集合名>")

6、展示当前数据库的所有集合

> show tables

7、向集合中添加文档(行)

> db.<集合名>.insert(<数据>)

>db.student.insert({id:1, name:"zhangsan", age:18})

8、查询集合

> db.<集合名>.find([条件])		//查询全部
> db.<集合名>.findOne([条件])		//查询单个

> db.student.find({id:1})

9、修改文档

> db.<集合名>.update(<条件>, <修改后的文档>)			//会把整个文档都修改掉
> db.<集合名>.update(<条件>, {$set:{<修改的键值对>}})	//只修改指定键值对

>db.student.update({id:1},{$set:{name:"lisi"}})

10、删除文档

> db.<集合名>.remove({})				//删除所有文档
> db.<集合名>.remove({[指定键值对]})	//删除指定文档

11、统计文档

> db.<集合名>.count([条件]) 			//统计指定条件的文档数量

12、正则表达式查询

> db.<集合名>.find({<键名称>: /<正则表达式>/})	

四、进阶内容

1、为什么要使用非关系型数据库?

(1)对数据库高并发读写的需求:NoSQL的数据存放在内存中(定期备份到硬盘中),而不是像关系型数据库一样存放在硬盘中
(2)对海量数据的高效率存储和访问的需求
(3)对数据库的高可扩展性和高可用性的需求:不用事先定义表结构,可以随时拓展

2、Mongodb锁机制

Mongodb使用读写锁来允许多个用户读取同一资源,比如数据库或者集合。
读采用共享锁,写采用排他锁。

读写锁的概念:一把锁分为两部分 读锁和写锁,其中读锁允许多个线程同时获得,因为读操作本身是线程安全的,而写锁则是互斥锁,不允许多个线程同时获得写锁,并且写操作和读操作也是互斥的。总结来说,读写锁的特点是:读读不互斥、读写互斥、写写互斥。

Mongodb中使用读锁的操作有:查询
使用写锁的操作有:写入、删除、更新、创建索引、执行脚本(eval)。

3、索引

建立索引的作用是提高查询效率,如果你对某一个字段建立了索引,那么系统就会将这个字段的值做为key值去保存,你必须保证该字段值的唯一性。Mongo数据库会在建立集合时,默认为 _id 字段建立索引。

索引背后的实现是B-树。

建立索引的方式为

db.collection_name.createIndex(
	{<key>:<n>}
)

key为字段名,n=1为升序,n= -1为降序。

4、数据存储格式——BSON

Mongo的数据存储格式为BSON,是一种类似于JSON的二进制数据格式。其数据类型有:_id、字符串、数字、日期时间、大字段blob、数组和自定义类型。

5、命名空间

Mongo命名空间如下:
数据库名.集合名

6、Mongo查询语句调优

1、使用explain()分析

2、建立唯一索引:可以极大地优化查询速度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值