MongoDB简介

关系型数据库:MySql,oracle,SqlServer


Nosql:非关系型数据库

关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段,而关系型数据库以键值对存储,它的结果不固定,每条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结果,所以减少一些时间和空间的开销。


结构化的数据:固定的长度,固定的类型,固定的格式;
非结构化的数据:avi,ppt,doc

非关系型数据库的优点:
1、简单的扩展(以键值对的方式存储,结构比较灵活)
2、快速的读写
3、低廉的成本
4、灵活的数据模型
缺点:
1、不提供对SQL的支持
2、支持的特性不过丰富(没有事务的概念
3、现在的产品不够成熟

MongoDB:
面向集合存储,易于存储对象类型的数据;
模式自由;
支持动态查询;
支持完全所有,包含内部对象;
支持复制和故障恢复;
使用高效的二进制数据存储,包括大型对象;
数据存储格式为BSON(JSON的扩展)

逻辑结构关系对比:
关系型数据库:数据库;表;记录三个层次
非关系型数据库:数据库,集合,文档对象;集合相当于关系型数据的表,但是集合中没有列,关系,行的概念;集合中只有文档,一个文档就相当于一条记录,这体现了模式自由的特点

文档是MongoDB中数据的基本单元,非常类似关系型数据库系统中的行,但是比行复杂的多。
集合就是一组文档,相当于关系型数据库的表;
MongoDB的单个计算机可以容纳多个独立的数据库每一个数据库都有自己的集合和权限。
每个文档都有一个特使的键_id,它在文档所处的集合中是唯一的,相当于关系型数据库中的表的主键。

1、关系型数据库的表的record必须保证用于每一个字段;
2、MongoDB的每一个document的key可以不一样;
3、关系型数据库查询使用sql
4、MongoDB查询使用内置的find函数

数据类型
  • null    null用于表示空值或者不存在的字段。 {"x":null}
  • 布尔   布尔类型有两个值'true'和'false1'. {"X":true}
  • 32位整数  类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。
  • 64位整数  不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数,
  • 64位浮点数  shell中的数字都是这种类型。下面的表示都是浮点数: {"X" : 3.1415926} {"X" : 3}
  • 字符串   UTF-8字符串都可表示为字符串类型的数据: {"x" : "foobar"}
  • 符号  不支持这种类型。shell将数据库里的符号类型转换成字符串。
  • 对象id  对象id是文档的12字节的唯一 ID, {"X" :ObjectId() }
  • 日期  日期类型存储的是从标准纪元开始的毫秒数。不存储时区: {"X" : new Date()}
  • 正则表达式  文档中可以包含正则表达式,采用JavaScript的正则表达式语法: {"x" : /foobar/i}
  • 代码  文档中还可以包含JavaScript代码:{"x" : function() { /* …… */ }}
  • 二进制数据  二进制数据可以由任意字节的串组成。不过shell中无法使用。
  • 最大值  BSON包括一个特殊类型,表示可能的最大值。shell中没有这个类型。
  • 最小值  BSON包括一个特殊类型,表示可能的最小值。shell中没有这个类型。
  • 未定义  文档中也可以使用未定义类型:{"x":undefined}
  • 数组  值的集合或者列表可以表示成数组:{"x" : ["a", "b", "c"]}
  • 内嵌文档  文档可以包含别的文档,也可以作为值嵌入到父文档中,数据可以组织得更自然些,不用非得存成扁平结构的:{"x" : {"food" : "noodle"}}

默认端口:27017
启动MongoDB
1、新建一个MongoDB的数据存储路径
2、MongoDB --dbpath=数据存放路径

客户端连接:mongo IP:port
新建数据库:user itcast
新建集合两种方式:
        隐式创建:在创建集合的同时往集合内添加数据
                          db.cl.insert({id:1;name:"xiaoming"})  创建C1集合
        显示创建:db.createCollection();
查看集合:show collections;
查询:db.cl.find({name:"xiaoming"},{age:12});
          db.c4.fing({age:{$gt:5}});查找age大于5的文档
          $lt:小于  $lte:小于等于 $gte:大于等于 $ne:不等于
          db.c3.find().skip(20).limit(10);//从20开始10个数

查询集合中的文档,$all主要用来查询数组的包含关系,查询条件中只要有一个不包含就不返回。
db.cl.find({age:{$all:[12,13]}});
db.cl.find({age:{$in:[12,13]}});  //包含任何一个就输出
db.cl.find({age:{$nin:[12,13]}});  //不包含任何一个的输出
db.c6.find({$or:[{name:"xiaoming"},{age:21}]}); //输出名字是xiaoming,年龄是21的
db.c6.find({$nor:[{name:"xiaoming"},{age:21}]}); //与上面相反

db.c7.find({age:{$exists:1}})//  包含age的
db.c7.find({age:{$exists:0}})//  不包含age的

游标:
var i=db.c6.find();
i.hasNext();// 返回ture
i.next();//返回一条记录


更新集合中的文档:
use  test  //建立数据库
db.c1.insert({name:"laowang",age:33});
db.c1.insert({name:"laofang",age:23});
db.c1.insert({name:"laofeng",age:43});
更新集合:
db.c1.update({age:33},{$set:{name:"wangli"}},1,1)  ;
四个参数::
1、需要更新的条件
2、更新的内容的对象
3、如果没有符合条件的记录,是否新增一条记录,1 新增,默认是0
4、如果有多个符合条件的记录,是否全部更新,默认值是0.如果全部更新设置为1

for(var i=1;i<10;i++)
     db.c2.insert({name:"zhang",age:10});
db.c2.update({name:"zhang"},{$inc:{age:1}},1,1);//age加1

删除某一个键也是用的更新:
db.c2.update({name:"zhang"},{$unset:{age:1}},1,1);











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值