1. MongoDB简介:

  • MongoDB属于非关系型数据库,即可以存放xml、json、bson类型的数据;
  • MongoDB是一个基于分布式文件存储的数据库。由**C++**语言编写;
  • MongoDB是一个内存数据库,数据都是放在内存里的;
  • 对数据的操作大部分都在内存中,但mongdb并不是单纯的内存数据库;
  • 在高负载的情况下,添加更多的节点,可以保证服务器的性能;
  • MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案;
  • MongoDB的默认数据库为"db",该数据库存储在data目录中。
  • MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

2. MongoDB的特点:

MongoDB将数据存储为一个文档,以一种直观文档的方式来完成数据的存储。数据结构由键值对组成,类似于Javascript中定义的JSON对象;字段值可以包含其他文档、数组及文档数组。

优点:

  • 性能优越,快速,在适量级的内存的mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快;
  • 高扩展性,第三方支持丰富,存储的数据格式是json格式,易于扩展;
  • 文档结构的存储方式,能够更便捷的获取数据,保证用户的访问速度;

缺点:

  • 对数据之间的事务关系支持比较弱(不支持表之间相互连接);
  • 占用空间过大;
  • 没有成熟的维护工具,开发文档不是很完善;

3. MongoDB的应用场景:

在传统的关系型数据库中(如mysql),数据是以表单为媒介进行存储的,每个表单均拥有纵向的列和横向的行。

对开发者来说,如果是因为业务需要或者项目初始阶段,而导致数据的具体格式无法明确定义的话,mongodb的这一鲜明特性就脱颖而出了。相比传统的关系型数据库。它非常容易被扩展,这也为写代码带来了极大的方便。

不过mongodb对数据之间的事务关系支持比较弱(不支持表之间相互连接),如果业务方面要求比较高的话,不适合使用mongdb。

4. MongoDB的术语:

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table joins

表连接,mongodb不支持

primary key

primary key

主键,mongodb自动将_id字段设置为主键

mysql(左侧)和mongodb(右侧)数据形式对比:

mongodb 查看存储引擎 mongodb内存数据库_数据库

4.1 collection 集合

集合就是 MongoDB 文档组,类似于关系数据库管理系统(RDBMS)中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

4.2 document 文档

文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

一个简单的文档例子如下:
{name:“wangli”,age:28,sex:“man”,address:“beijing”}

5. MongoDB的数据类型:

  • Object ID :Documents 自生成的 _id
  • String: 字符串,必须是utf-8
  • Boolean:布尔值,true 或者false
  • Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
  • Double:浮点数 (没有float类型,所有小数都是Double)
  • Arrays:数组或者列表,多个值存储到一个键
  • Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
  • Null:空数据类型 , 一个特殊的概念,None Null
  • Timestamp:时间戳
  • Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

6. MongoDB的常用命令:

每一个指令后面都可以加help(),查看当前指令的帮助信息。

6.1 数据库常用命令

进入数据库
mongo

查看所有的数据库
show dbs

创建/切换数据库,有的话就切换,没有的话就创建,创建后自动切换到该数据下
use 数据库名称

查看针对db的帮助信息
db.help()

查看当前是哪个数据库
db.getName()

查看数据库的信息,例如:查看有哪些表
db.stats()

查看当前数据库的版本
db.version()

查看当前数据库的连接地址
db.getMongo()

删除数据库
db.dropDatabase()

6.2 Collection集合操作

创建一个集合
db.createCollection("集合名称")

查看当前db的所有集合
db.getCollectionNames()

查看针对集合的帮助信息
db.集合名称.help()

查看去重后的数据
db.users.distinct("字段名")

查看集合里有哪些文档
db.集合名称.find()

查看集合里文档的长度
db.集合名称.find().count()

查询集合里的前n条数据
db.集合名称.find().limit(n)

查询第n条之后的数据
db.集合名称.find().skip(n)

添加文档
db.集合名称.save({JSON数据})

修改文档
第一个参数为要匹配的条件,例如{name:“lili”};
第二个参数为要修改的内容,例如{age:18};
第三个参数表示当查询不到结果时是否将该条内容插入到集合当中,false为不插入,true表示插入;
第四个参数表示如果查询到多条记录的话,是否要全部更新,true为全部更新,false为只更新一条;
db.集合名称.update({匹配条件},{$set:{修改后的内容}},createbool,multbool)

删除文档,参数为要删除的匹配项,例如{name:“zhangesan”}
db.集合名称.remove({匹配项})

6.3 实际使用:

创建一个名称为myData的数据库
use myData

创建一个名称为users的集合
db.createCollection("users")

在该集合添加一些文档,字段数可以不一样
db.users.save({name:"zhagsan",age:18,sex:"man"})db.users.save({name:"lisi",age:28,sex:"man",address:"beijing"})db.users.save({name:"user01",age:20,sex:"woman"})db.users.save({name:"user01",age:23,sex:"man"})

查看集合里的所有内容,会自动增加_id属性
db.users.find()

将年龄为18的数据的name改成zhangsan
db.users.update({age:18},{$set:{name:"zhangsan"}},false,true)

删除年龄为28的数据
db.users.remove({age:28})

返回name字段不重复的数据
db.users.distinct("name")

查询年龄为18的数据
db.users.find({age:18})

查询年龄大于22的数据
db.users.find({age:{$gt:22}})

$gt大于, $lt小于, $gte 大于等于,$lte 小于等于;

查询年龄大于等于20,小于等于30
db.users.find({age:{$gte:20,$lte:30}})

查询name中含有user的数据,模糊查询,匹配为正则表达式
db.users.find({name:/user/})

查询name以zhange开始的数据
db.users.find({name:/^zhange/})

查询指定列,{} 表示* 匹配所有,1表示展示,0表示不展示
db.users.find({},{name:1,age:1})

查询年龄大于23的数据,只展示name和age
db.users.find({age:{$gt:23}},{name:1,age:1,_id:0})

按照年龄进行升序排序,sort里,1表示升序(从小到大),-1表示降序(从大到小)
db.users.find({},{name:1,age:1,_id:0}).sort({age:1})

查询指定多个条件
db.users.find({name:"zhangsan",age:18})

查询前3条数据
db.users.find().limit(3)

返回数据的长度
db.users.find().count()

查询5条之后的数据
db.users.find().skip(5)

查询第3-5条数据,即跳过2条,取3条数据
db.users.find().limit(3).skip(2)

查询年龄等于20或者18的数据
db.users.find({$or:[{age:20},{age:18}]})

查询第一条数据
db.users.findOne()

查询符合条件的数据长度
db.users.find({age:18}).count()