MongoDB

一. 简介

  1. 什么是MongoDB
    MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构很是松散,是相似 JSON 的 BSON 格式,所以能够存储比较复杂的数据类型。java

  2. MongoDB特色
    MongoDB 最大的特色是他支持的查询语言很是强大,其语法有点相似于面向对象的查询语言,几乎能够实现相似关系数据库单表查询的绝大部分功能,并且还支持对数据创建索引。它是一个面向集合的,模式自由的文档型数据库。正则表达式

  3. 具体特色总结以下:
    • 面向集合存储,易于存储对象类型的数据
    • 模式自由
    • 支持动态查询
    • 支持彻底索引,包含内部对象
    • 支持复制和故障恢复
    • 使用高效的二进制数据存储,包括大型对象(如视频等)
    • 自动处理碎片,以支持云计算层次的扩展性
    • 支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序,社区中也提供了对 Erlang 及.NET 等平台的驱动程序
    • 文件存储格式为 BSON(一种 JSON 的扩展)
  4. MongoDB体系结构
    MongoDB 的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用 MongoDB 开发应用程序使用的就是逻辑结构。spring

    • MongoDB 的文档(document),至关于关系数据库中的一行记录。
    • 多个文档组成一个集合(collection),至关于关系数据库的表。
    • 多个集合(collection),逻辑上组织在一块儿,就是数据库(database)。
    • 一个 MongoDB 实例支持多个数据库(database)。

    文档(document)、集合(collection)、数据库(database)的层次结构以下图:

    mongodb

  5. 数据类型
    基本数据类型
    • null:用于表示空值或者不存在的字段,{“x”:null}
    • 布尔型:布尔类型有两个值true和false,{“x”:true}
    • 数值:shell默认使用64为浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可使用
    • NumberInt(4字节符号整数)或NumberLong(8字节符号整数),
    • {“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
    • 字符串:UTF-8字符串均可以表示为字符串类型的数据,{“x”:“呵呵”}
    • 日期:日期被存储为自新纪元依赖通过的毫秒数,不存储时区,{“x”:new Date()}
    • 正则表达式:查询时,使用正则表达式做为限定条件,语法与JavaScript的正则表达式相同,{“x”:/[abc]/}
    • 数组:数据列表或数据集能够表示为数组,{“x”: [“a“,“b”,”c”]}
    • 内嵌文档:文档能够嵌套其余文档,被嵌套的文档做为值来处理,{“x”:{“y”:3 }}
    • 对象Id:对象id是一个12字节的字符串,是文档的惟一标识,{“x”: objectId() }
    • 二进制数据:二进制数据是一个任意字节的字符串。它不能直接在shell中使用。若是要将非utf-字符保存到数据库中,二进制数据是惟一的方式。

    代码:查询和文档中能够包括任何JavaScript代码,{“x”:function(){/…/}}shell

二. 走进MongoDB

  1. window系统MongoDB安装
    双击安装,并将 D:\Program Files\MongoDB\Server\3.2\bin 添加到path数据库

    • 首先打开命令提示符,建立一个用于存放数据的目录
    md d:\data
    • 启动服务
    mongod --dbpath=d:\data

    咱们在启动信息中能够看到,mongoDB的默认端口是27017
    若是咱们想改变默认的启动端口,能够经过--port来指定端口在命令提示符输入如下命令便可完成登录 mongo
    退出mongodb exit数组

  2. 查询命令
    • use spit 建立数据库
    • db.spit.find() 查询全部
    • db.spit.insert({content:"最近有点冷",visits:10 }) 插入
    • db.spit.find({"_id":1}) 按照id查询
    • db.spit.find({"userid":"1013"}) 根据字段查询
    • db.spit.findOne({"userid":"1013"})按字段查询一条数据
  3. 修改命令
    • db.spit.update({"_id":1},{"content":"我在桂电读书"}) 修改 。其余字段设置为空
    • db.spit.update({_id:"2"},{$set:{visits:NumberInt(2000)}}) 修改,其余字段不变
  4. 删除命令
    • db.集合名称.remove(条件),好比:db.spit.remove({visits:1000}) 删除visits =1000的数据
    • db.spit.remove({}) 所有删除,请慎用
  5. 统计条数
    • db.spit.count() 统计所有条数
    • db.spit.count({userid:"1013"}) 按条件统计,统计userid为1013的记录条数
  6. 模糊查询
  7. 大于 小于 不等于
    <, <=, >, >= 这个操做符也是很经常使用的,格式以下
    • db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value
    • db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value
    • db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value
    • db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value
    • db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value

    示例:查询吐槽浏览量大于1000的记录 db.spit.find({visits:{$gt:1000}})数据结构

  8. 包含与不包含
    包含使用$in操做符。框架

    db.spit.find({userid:{$in:["1013","1014"]}})

    不包含使用$nin操做符.云计算

    db.spit.find({userid:{$nin:["1013","1014"]}})
  9. 条件链接
    咱们若是须要查询同时知足两个以上条件,须要使用$and操做符将条件进行关联。(至关于SQL的and)

    $and:[ { },{ },{ } ]

    示例:查询吐槽集合中visits大于等于1000 而且小于2000的文档

    db.spit.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})

    若是两个以上条件之间是或者的关系,咱们使用 操做符进行关联,与前面and的使用方式相同

    $or:[ { },{ },{ } ]

    示例:查询吐槽集合中userid为1013,或者浏览量小于2000的文档记录

    db.spit.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})
  10. 列值增加
    若是咱们想实现对某列值在原有值的基础上进行增长或减小,可使用$inc运算符来实现

    db.spit.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )

三. Java操做MongoDB

  1. mongodb-driver
    mongodb-driver是mongo官方推出的java链接mongoDB的驱动包,至关于JDBC驱动。咱们经过一个入门的案例来了解mongodb-driver的基本使用

  2. 代码实现

    <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.11.1</version>
        </dependency>
    public class MongoDemo1 {
    public static void main(String[] args) {
        MongoClient client=new MongoClient("192.168.58.128");//建立链接
        MongoDatabase spitdb = client.getDatabase("spitdb");//打开数据库
        MongoCollection<Document> spit = spitdb.getCollection("spit");//
        BasicDBObject bson=new BasicDBObject("userid","1013");// 构建查询
        FindIterable<Document> documents = spit.find(bson);//查询记录获取结
        for(Document document:documents){ //
            System.out.println("内容:"+ document.getString("content"));
            System.out.println("用户ID:"+document.getString("userid"));
            System.out.println("浏览量:"+document.getInteger("visits"));
        }
        client.close();//关闭链接
    }
    }

四. SpringDataMongoDB

  1. SpringData家族成员之一,用于操做MongoDb的持久层框架,封装了底层的mongodbdriver。

  2. 有序列表项 二
  3. 有序列表项 三
  4. 有序列表项 一
  5. 有序列表项 二
  6. 有序列表项 三
  7. 有序列表项 一
  8. 有序列表项 二
  9. 有序列表项 三
  10. 有序列表项 三

相关文章
相关标签/搜索