MongoDB学习笔记

Wesley13
• 阅读 640

Nosql简介:

NoSQL(Not Only SQL),意即“不仅仅是SQL“,指的是非关系型数据库。是一种全新的数据库革命性运动,早期就有人提出,发展至2009年趋勢越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是种全新的思维的注入。

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

MongoDB学习笔记

常见的NoSql(非关系型数据库)数据库

MongoDB学习笔记

 NoSql数据库优缺点

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

简单的扩展

快速的读写

低廉的成本

灵活的数据模型

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

不提供对SQL的支持

支持的特性不够丰富

现有的产品不够成熟

 MongoDB简介

      MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:面向集合存储,易于存储对象类型的数据模式自由

      支持动态查询

      支持完全索引,包含内部对象支持复制和故障恢复

      使用高效的二进制数据存储,包括大型对象文件存储格式为BSON(一种JSON的扩展)

MongoDB学习笔记

1.关系型数据的表的rcord必须保证拥有每一个field

2.mongoDB的每一个document的key可以不一样

3.关系型数据查询使用SQL

4.mongoDB查询使用内置find函数--->>>基于BSON的特有查询工具

1.逻辑结构关系的对比:

MongoDB学习笔记

MongoDB基本概念介绍:

交档(document)是MongoDB中数据的基本单元,

非常类似于关系型数据库系统中的行(但是比行要复杂的多)
集合(collection)就是一组文档, 

如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表
MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限
MongoDB自带简洁但功能强大的 **JavaSariptshell,**这个工具对于管理MongoDB实例和操作数据作用非常大
每一个文档都有一一个特殊的键id",它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键

MongoDB的安装:

本机环境:

ubuntu18.04

sudo apt-get install mongodb

启动:

默认端口:27017

mongod

 windows平台:

MongoDB学习笔记

连接:

mongo

MongoDB学习笔记

MongoDB数据类型: 

MongoDB学习笔记

MongoDB常用操作:CRUD

MongoDB学习笔记 MongoDB学习笔记

mongo  的命令 连接到数据库

创建集合:
    显示创建:db.createCollection("heima1")
    隐式创建:直接在创建集合的同时往集合里添加数据
增删改查语法,过一遍即可

//更新   update tableName  set   ""  where conditon
1:用于设置更新的条件
2:用于设置更新的内容的对象
3:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
4:如果有多条记录被满足,是否全部更新.. (1更新全部)(0更新1条)
db.collectionName("condition","objectValue")

3:建立索引的目的就是加速查询..
普通索引:
db.collectionName.ensureIndex({key:1})
唯一索引:
db.collectionName.ensureIndex({key:1},{unique:true})
在某一个key 上面建立的唯一索引,这个key 对应的值不能重复添加..


4:固定集合:固定集合指的是事先创建而且大小固定的集合 。
固定集合很像环形队列,如果空间不足,最早的文档就会被删除,
为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制。


5:备份 与 恢复
//先把数据从数据当中通过命令导出来,然后我们删掉数据库当中的数据,再把导出来的数据恢复到数据库当中...

mongodb bin 目录下提供的命令

mongodump 备份

mongorestore 恢复..

6:导入导出

mongoexport 

mongoimport

7:数据库安全:

1:至少需要有个管理员账号,admin 数据库当中的用户都会被视为管理员
(连接到admin 数据库当中,添加一个管理员账号)
2:我有了管理员的账号为其它的数据库分配账号(操作数据来说,读,写) 
(为test 分配读,写的账号)
3:重启我的mongodb ,开启安全检查

4:客户端重新连接mongdb ,接下来操作数据的部分都需要登录。。


5:集群

1:主从集群

2:副本集:副本集就是有自动故障恢复功能的主从集群。
    主从集群和副本集最大的区别就是副本集没有固定的“主节点”
    2.1:副本集当中最少保证要有两个节点
    2.2:副本集当中的备份节点只做数据备份或者故障恢复的功能
6:分布式存储

分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。将数据分散到不同的机器上,不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。
重点理解片键

7:使用java 代码 来调用mongodb 
连接其它的数据库的时候连接的驱动包
使用mongodb 提供的客户端的api 


java  nio  netty  mina

View Code

支持类似js语法输入

创建集合:

MongoDB学习笔记

删除集合:

MongoDB学习笔记

MongoDB学习笔记

查看数据库信息:

 MongoDB学习笔记

查看集合:

MongoDB学习笔记

条件表达式:

MongoDB学习笔记

统计分页排序

 MongoDB学习笔记

 查询包含关系: 

$all

MongoDB学习笔记

$in

 MongoDB学习笔记

$nin

MongoDB学习笔记

$or

MongoDB学习笔记

$exists

MongoDB学习笔记

游标 

MongoDB学习笔记

更新集合: 

MongoDB学习笔记

例子:

MongoDB学习笔记

$set

MongoDB学习笔记

$inc

MongoDB学习笔记

 删除键:

MongoDB学习笔记

索引:

目的:加速查询

MongoDB学习笔记

新建索引:

MongoDB学习笔记

固定集合:

capped collection:

MongoDB学习笔记

固定集合:

固定集合指的是事先创建而且大小固定的集合 。固定集合很像环形队列,如果空间不足,最早的文档就会被删除,
为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制。

备份与恢复

备份:

MongoDB学习笔记

 恢复:

MongoDB学习笔记

导入和导出

导出:

MongoDB学习笔记

导入:

MongoDB学习笔记

安全认证

安全认证

MongoDB学习笔记

MongoDB学习笔记

新版的MongoDB已经不支持addUser方法了:参考

db.createUser({user:'root',pwd:'123456',roles:['userAdminAnyDatabase']})

数据库安全:

1:至少需要有个管理员账号,admin 数据库当中的用户都会被视为管理员
(连接到admin 数据库当中,添加一个管理员账号)
2:我有了管理员的账号为其它的数据库分配账号(操作数据来说,读,写)
(为test 分配读,写的账号)
3:重启我的mongodb ,开启安全检查

4:客户端重新连接mongdb ,接下来操作数据的部分都需要登录。

MongoDB的主重复制

主从复制:

 MongoDB学习笔记

MongoDB学习笔记

操作:

MongoDB学习笔记

MongoDB的副本集

副本集:副本集就是有自动故障恢复功能的主从集群。
主从集群和副本集最大的区别就是副本集没有固定的“主节点”
2.1:副本集当中最少保证要有两个节点
2.2:副本集当中的备份节点只做数据备份或者故障恢复的功能

定义:

MongoDB学习笔记

以三个节点为例:

MongoDB学习笔记

启动:

MongoDB学习笔记

初始化:

MongoDB学习笔记

查询主库: 

MongoDB学习笔记

 图示:

 MongoDB学习笔记

MongoDB的分布式存储

 分片(sharding)分布式存储

 MongoDB学习笔记

分片:

MongoDB学习笔记

 步骤:

MongoDB学习笔记

MongoDB学习笔记

MongoDB学习笔记

添加数据:

MongoDB学习笔记

图示

MongoDB学习笔记

所用JAVA代码调用MongoDB

MongoDB学习笔记 MongoDB学习笔记

import java.net.UnknownHostException;

import org.junit.Test;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;

/**
 * 使用java 代码调用mongodb 
 * @author Administrator
 *
 */
public class MongoDao {
    @Test
    public void add() throws UnknownHostException{
        Mongo mongo=new Mongo("127.0.0.1", 27017);
        
        DB db=mongo.getDB("test");
        
        DBCollection collection=db.getCollection("person");
        //{key:value,key:value}
        BasicDBObject dbObject=new BasicDBObject();
        
        dbObject.put("name", "蒋珍珍");
        
        dbObject.put("age", 18);
        
        dbObject.put("sex", "女");
        
        collection.insert(dbObject);
        
        mongo.close();
    }
    @Test
    public void del() throws UnknownHostException{
        Mongo mongo=new Mongo("127.0.0.1", 27017);
        
        DB db=mongo.getDB("test");
        
        DBCollection collection=db.getCollection("person");
        //{key:value}
        
        
        //{$nor:[{name:”user2”},{age:3}]
        //db.collection.find({age:{$gt:10}})
        //{}
        DBObject dbObject=new BasicDBObject();
        //dbObject.put("key",{})  {key:{}}
        
        
        collection.remove(dbObject);
        
        mongo.close();
        
    }
    public void update(){
        
    }
    @Test
    public void query() throws UnknownHostException{
        Mongo mongo=new Mongo("127.0.0.1", 27017);
        
        DB db=mongo.getDB("test");
        
        DBCollection collection=db.getCollection("person");
        
//        BasicDBObject dbObject=new BasicDBObject();
        
//        dbObject.put("name", "蒋珍珍");
        DBCursor dbCursor=collection.find();
        
        while(dbCursor.hasNext()){
            System.out.println(dbCursor.next().toString());
        }
        
    }

}

View Code

游戏的架构

MongoDB学习笔记

 为什么连接无需数据库驱动?

MongoDB学习笔记

XMPP的简介

MongoDB学习笔记

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java如何操作非关系型数据库redis(
redis简单介绍:是一种Nosql数据库,Nosql全称是NotOnlySQL,是一种不同于关系型数据库的数据库管理系统设计方式。对NoSQL最普遍的解释是“非关系型的”,强调KeyValueStores和文档数据库的优点,而不是单纯的反对RDBMSSowhatcanIdowithJedis?All
Wesley13 Wesley13
3年前
redis 学习(常用命令及demo)
redisNOSQL介绍:是一项全新的数据库革命性运动,是一个非关系型数据库,在超大规模和高并发的SNS类型网站中应用广泛。NoSql是以keyvalue形式存储,特点是:非关系型、分布式、开源的水平可扩展。特点优势:处理超大量数据运行在便宜pc集群上击碎了性能瓶颈应用场景:1\
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
MongoDB的安装与使用
1NoSQL简介NoSQL(NoSQLNotOnlySQL),意即"不仅仅是SQL";NoSQL是指非关系型的数据库,有时也称作NotOnlySQL的缩写,即"不仅仅是SQL",是对非传统关系型数据库管理系统的统称;NoSQL用于超大规模数据的存储(数据存储不需要固定的模式,无需多余操
Stella981 Stella981
3年前
Redis01——Redis介绍
1、NoSQL数据库概述  NoSQL(NoSQLNotOnlySQL),意即“不仅仅是SQL”,泛指非关系型的数据库。  NoSQL不依赖业务逻辑方式存储,而以简单的keyvalue模式存储。因此大大的增加了  数据库的扩展能力  特点:不遵循SQL标准,不支持ACID,远超于SQL的性能  适
Stella981 Stella981
3年前
Redis数据库的安装与基本应用
一:了解NoSQL1:介绍:Nosql的全称是NotOnlySql,这个概念早起就有人提出,在09年的时候比较火。Nosql指的是非关系型数据库,而我们常用的都是关系型数据库。就像我们常用的mysql,sqlserver一样,这些数据库一般用来存储重要信息,应对普通的业务是没有问题的。但是,随着互联网的高速发展,传统的关系型数据库
Stella981 Stella981
3年前
Redis的认识和基本操作
 Redis是什么Redis是一个高性能的开源的、C语言写的Nosql(非关系型数据库),数据保存在内存中。Redis是以keyvalue形式存储的Nosql,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,非关系型数据库严格上不是一种数据库,应该是一种数据结构
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这