Mongodb

NoSQL(Not Only SQL )

    非关系型数据库以键值对(key-value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销.


    在优势方面主要体现在下面几点:

简单的扩展

快速的读写

低廉的成本

灵活的数据模型


    在不足方面主要有下面几点:

不提供对SQL的支持

支持的特性不够丰富

现有的产品不够成熟


MongoDB

下载 http://www.mongodb.org/downloads

    用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:

    面向集合存储,易于存储对象类型的数据

    模式自由

    支持动态查询

    支持完全索引,包含内部对象

    支持复制和故障恢复

    使用高效的二进制数据存储,包括大型对象

    文件存储格式为BSON(一种JSON的扩展)


MongoDB基本概念

    1. 文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多)

    2. 集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表

    3. MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限

    4. MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大

    5. 每一个文档都有一个特殊的键"_id",它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键



MongoDB数据类型

数据类型      描述                                 举例

null      表示空值或者未定义的对象                      {"x":null}

布尔值      真或者假:true或者false                      {"x":true}

32位整数      32位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数  

64位整数      64位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数  

64位浮点数    64位浮点数。shell中的数字就是这一种类型      {"x":3.14,"y":3}

字符串      UTF-8字符串                              {"foo":"bar"}

符号      shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串  

对象id      文档的12字节的唯一id                      {"id": ObjectId()}

日期      从标准纪元开始的毫秒数                      {"date":new Date()}

正则表达式    文档中可以包含正则表达式,遵循JavaScript的语法  {"foo":/foobar/i}

代码      文档中可以包含JavaScript代码              {"x":function() {}}  

未定义      undefined                              {"x":undefined}

数组      值的集合或者列表                              {"arr": ["a","b"]}

内嵌文档          文档可以作为文档中某个key的value       {"x":{"foo":"bar"}}



安装MongoDB 

    将下载的MongoDB的压缩文件解压到任意目录,并将其中的bin目录加入到系统的path环境变量中即可。

    在启动MongoDB之前,要手动创建一个存放MongoDB数据文件的目录,如D:\mongo_data

    在命令行执行 mongod --dbpath=D:\mongo_data

    

    在命令行中可以使用mongo命令连接到MongoDB服务器,如下,输入mongo命令默认连接到本地的名称为test的数据库,如果希望连接到远程数据库,可以使用mongo ip:port


    创建数据库,使用命令 use 数据库名称 ,如:use mydb1


     删除当前数据库,使用命令 db.dropDatabase()


     查看所有数据库,使用命令 show dbs 


     查看当前数据库中所有的集合,使用命令 show collections 或使用show tables查看当前所在数据库,使用命令 db


    创建集合有两种方式,显示创建和隐式创建

    显示创建可以使用命令 db.createCollection(“集合名称")


    隐式创建可以使用命令 db.集合名称.insert({}),指创建集合并同时向集合中插入数据,例如:db.customer.insert({name:”jack”})


    向集合添加文档,使用命令 db.集合名称.insert({}),例如:

        db.user1.insert({name:”jack”,age:20})


删除集合中的文档,

    使用命令 db.集合名称.remove({删除条件}),不加删除条件为删除集合中的所有文档,例如,db.c1.remove() 为删除c1集合中的所有文档,db.c1.remove({name:”user1”})为删除c1集合中name为user1的文档


查询集合中的文档,

    可以使用命令 db.集合名称.find({条件}),或者使用 db.集合名称.findOne()  查询第一个文档

    查询集合中的文档,返回某些特定的键值

    查询集合中的文档 ,使用条件表达式(<, <=, >, >=,!=)

        //大于: field > value

        db.collection.find({field:{$gt:value}});

        

        //小于: field < value

        db.collection.find({field:{$lt:value}});

        

        //大于等于: field >= value

        db.collection.find({field:{$gte:value}});

        

        //小于等于: field <= value

        db.collection.find({field:{$lte:value}});

        

        //不等于:  field != value

        db.collection.find({field:{$ne:value}});


    查询集合中的文档 ,统计(count)、排序(sort)、分页(skip、limit)

        db.customer.count();

        db.customer.find().count();

        db.customer.find({age:{$lt:5}}).count();

        db.customer.find().sort({age:1}); 降序-1

        db.customer.find().skip(2).limit(3);

        db.customer.find().sort({age:-1}).skip(2).limit(3);

        db.customer.find().sort({age:-1}).skip(2).limit(3).count();

        db.customer.find().sort({age:-1}).skip(2).limit(3).count(0);

        db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);


    查询集合中的文档 ,$all主要用来查询数组中的包含关系,查询条件中只要有一个不包含就不返回

    查询集合中的文档 ,$in,类似于关系型数据库中的IN

    查询集合中的文档 ,$nin,与$in相反

    查询集合中的文档 ,$or,相当于关系型数据库中的OR,表示或者的关系,例如查询name为user2或者age为3的文档,命令为:

    db.customer.find({$or:[{name:”user2”},{age:3}]})

     查询集合中的文档 ,$nor,表示根据条件过滤掉某些数据,例如查询name不是user2,age不是3的文档,命令为:

    db.customer.find({$nor:[{name:”user2”},{age:3}]})

     查询集合中的文档 ,$exists,用于查询集合中存在某个键的文档或不存在某个键的文档,例如查询customer集合中存在name键的所有文档,可以使用 db.customer.find({name:{$exists:1}}),

    $exists:1表示真,指存在

    $exists:0表示假,指不存在

    查询集合中的文档 ,类似于关系型数据库,mongodb中也有游标的概念



 更新集合中的文档,语法如下

    db.collection.update(criteria,objNew,upsert,multi)

    

    参数说明:

    criteria:用于设置查询条件的对象

    objNew:用于设置更新内容的对象

    upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1

    multi:如果有多个符合条件的记录,是否全部更新,取值为0或1

    

    注意:默认情况下,只会更新第一个符合条件的记录

    一般情况下后两个参数分别为0,1 ,即:

    db.collection.update(criteria,objNew,0,1)


    更新集合中的文档, $set 用来指定一个键的值,如果这个键不存在,则创建它。例如:

    给name为user1的文档添加address,可以使用命令:db.c1.update({name:”user1”},{$set:{address:”bj”}},0,1)

    将name为user1的文档修改address为tj,其它键值对不变,命令为:

    db.c1.update({name:”user1”},{$set:{address:”tj”}},0,1)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章