MongDB 快速上手攻略

MongoDB快速上手攻略

1. MongoDB 概述

MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,是一种开源的文档数据库──NoSql数据库的一种。NoSql,全称是 Not Only Sql,指的是非关系型的数据库。

是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

他支持的数据结构非常松散,是类似 json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几 乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

 

1.2 同级产品

CouchDB

​ Apache CouchDB 是一个面向文档的数据库管理系统。它提供以 JSON 作为数据格式的 REST 接口来对其进行操作,并可以通过视图来操纵文档的组织和呈现。 CouchDB 是 Apache 基金会的顶级开源项目。

Terrastore

​ Terrastore是一个基于Terracotta(一 个业界公认的、快速的分布式集群组件)实现的高性能分布式文档数据库。可以动态从运行中的集群添 加/删除节点,而且不需要停机和修改任何配置。支持通过http协议访问Terrastore。Terrastore提供了一个基于集合的键/值接口来管 理JSON文档并且不需要预先定义JSON文档的架构。易于操作,安装一个完整能够运行的集群只需几行命令

ThruDB

​ Thrudb是一套简单的服务建立在Apache的Thrift的框架,提供索引和文件存储服务的网站建设和推广。其目的是提供Web开发灵活,快速和易于使用的服务,可以加强或取代传统的数据存储和访问层。

 

1.3 同质分析

Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。

 

3.优越性

2.1 特点:

MongoDB数据库的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

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

 模式自由。

支持动态查询。

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

支持查询。

支持复制和故障恢复。

 

面向文档存储(类JSON数据模式简单而强大)

 使用高效的二进制数据存储,包括大型对象(如视频等)。

 自动处理碎片,以支持云计算层次的扩展性

 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。

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

可通过网络访问。

MongoDB是一个开源的NoSQL文档数据库,它使用一个JSON格式的模式(schema)替换了传统的基于表的关系数据。

更高的写入负载

 默认情况下,MongoDB更侧重高数据写入性能,而非事务安全,MongoDB很适合业务系统中有大量“低价值”数据的场景。

 

数据量很大或者未来会变得很大

依赖数据库(MySQL)自身的特性,完成数据的扩展是较困难的事,在MySQL中,当一个单达表到5-10GB时会出现明显的性能降级,此时需要通过数据的水平和垂直拆分、库的拆分完成扩展,使用MySQL通常需要借助驱动层或代理层完成这类需求。而MongoDB内建了多种数据分片的特性,可以很好的适应大数据量的需求。

结构不明确,且数据在不断变大

 

​ 在一些传统RDBMS(关系数据库管理系统)中,增加一个字段会锁住整个数据库/表,或者在执行一个重负载的请求时会明显造成其它请求的性能降级。通常发生在数据表大于1G的时候(当大于1TB时更甚)。 因MongoDB是文档型数据库,为非结构货的文档增加一个新字段是很快速的操作,并且不会影响到已有数据。另外一个好处当业务数据发生变化时,是将不在需要由DBA(数据库管理员)修改表结构。
 

3..相关环境配置:

 

4.基本使用:

4.1 Java代码连接数据库

1. 创建maven项目,导入mongodb所需坐标

    <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-java-driver</artifactId>
                <version>3.8.1</version>
    </dependency>

 

2.通过Java的代码获得连接

public static void main( String args[] ){
    try{
        // 连接到 mongodb 服务 参数1:ip地址,参数2:端口号
        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
        // 连接到数据库 参数:数据库名 
        MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");
    }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
}

4.2 普通的增删改查

4.2.1 添加

public static void main( String args[] ){
        try{
            // 连接到 mongodb 服务
            MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
            // 连接到数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");
            //创建文档
            MongoCollection<Document> collection = mongoDatabase.getCollection("user");
            //准备数据
            Document document = new Document("name", "gdj").
                    append("sex", "男").
                    append("age", 18).
                    append("phone", "17633923693");
            List<Document> documents = new ArrayList<Document>();
            documents.add(document);
            //将数据存入数据库
            collection.insertMany(documents);
            }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
}    

 

数据库效果展示:

4.2.2 删除

//删除age为18的第一个文档  
collection.deleteOne(![在这里插入图片描述](https://img-blog.csdnimg.cn/20181115000107151.png)Filters.eq("age", 18));  
//删除age为18 所有文档  
collection.deleteMany (Filters.eq("age", 18));

4.2.3 修改

collection.updateMany(Filters.eq("age", 18), new Document("$set",new Document("age",20)));

collection.deleteOne(![在这里插入图片描述](https://img-blog.csdnimg.cn/20181115000107151.png)Filters.eq("age", 18));

//删除age为18 所有文档 collection.deleteMany (Filters.eq("age", 18));

4.2.3 修改

//更新文档 将文档中 所有age=18的文档修改为 age=20

 

数据库效果

在这里插入图片描述

 

 

4.2.4 查询所有

public static void main( String args[] ){
    try{
        // 连接到 mongodb 服务
        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
        // 连接到数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");
        //创建文档
        MongoCollection<Document> collection = mongoDatabase.getCollection("user");
        //查询所有
        FindIterable<Document> findIterable = collection.find();
        MongoCursor<Document> mongoCursor = findIterable.iterator();
        while(mongoCursor.hasNext()){
            System.out.println(mongoCursor.next());
        }
    }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
}

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");

MongoCollection<Document> collection = mongoDatabase.getCollection("user");

//查询所有

FindIterable<Document> findIterable = collection.find();

MongoCursor<Document> mongoCursor = findIterable.iterator();

while(mongoCursor.hasNext()){ System.out.println(mongoCursor.next()); }

}catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } }

 

4.2.5 条件查询

//设置查询条件

//DBObject dbobject = new BasicDBObject();

//dbobject.put("age", 18);

//将查询条件放入返回结果集

//无查询条件 返回所有结果集

DBCursor dbCursor = dbcollection.find(null);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值