全栈工程师 07 笔记

MongoDB数据库

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
  • 文件存储格式为BSON(一种JSON的扩展)
  • 可通过网络访问
    所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。
    模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,完全可以把不同结构的文件存储在同一个数据库里。
    存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。
    MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB
    在32位模式运行时支持的最大文件尺寸为2GB。
    MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

在mongodb中基本的概念是文档、集合、数据库,下表Mongo中的一些概念

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

一、数据库排行榜前10 http://db-engines.com/en/ranking

  1. Oracle 大型项目使用商业收费的
  2. MySQL 集群
  3. Microsoft SQL Server
  4. MongoDB 文档存储
  5. PostgreSQL
  6. DB2
  7. Cassandra
  8. Microsoft Access
  9. SQLlite
  10. Redis

二、MongoDB数据库安装与操作
MongoDB 数据库官网 http://www.mongodb.com
MongoDB数据库下载地址https://www.mongodb.com/download-center?jmp=nav#community

mongoDB的安装步骤

  1. 到官网下载MongoDB数据库压缩包到服务器上


    wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.8.tgz* -c 参数 :支持断点续传

  2. 解压刚刚下载的mongoDB压缩包 运行
    //解压缩
    tar zxvf mongodb-linux-x86_64-ubuntu1604-3.2.8.tgz
    //重命名
    mv mongodb-linux-x86_64-ubuntu1604-3.2.8 mongodb
    //切换目录
    cd mongodb
    //创建数据目录
    mkdir jingyue_db
    //运行
    ./bin/mongod --dbpath=./jingyue_db
    解释:
    ./bin/mongod //安装执行文件
    --dbpath=./jingyue_db //安装数据库路径
    jingyue_db //自己创建专门用来放数据库的文件

  3. 编写开启mongoDB的shell脚本
    vim ~/mongodb/bin/mongodb
    内容:
    #!/bin/bash
    sname="/home/scort/mongodb/bin/mongod --dbpath=/home/jingyue/mongodb/db_data"
    case $1 in
    start)
    $sname &
    ;;
    stop)
    pkill mongod
    ;;
    esac
    保存退出!
    //添加执行权限
    chmod 750 mongodb
    //运行//开启
    /home/jingyue/mongodb/bin/mongodb start
    //关闭
    /home/jingyue/mongodb/bin/mongodb stop


mongoDB的增、删、改、查

  1. 进入数据库命令,MongoDB的默认端口:27017
    /home/scort/mongodb/bin/mongo
  2. 创建数据库

    新创建的并不在数据库的列表中, 要显示它,我们需要向 数据库插入一些数据
    use test //use 自定义集合名也可称库名
    db;

  3. 查看数据库使用情况查询
    show dbs;
  4. 使用 insert() 方法向集合中插入文档
    //insert插入单条数据
    db.test.insert({"xingqu":"计算机"});
    // insertMany插入多条数据,键名(key)的分号可加可不加,
    db.test.insertMany([{name:"jing"},{name:"yue"},{name:"xiaoyueyue"}]);
    //插入多条数据,使用语法
    for(i=0;i<100;i++)db.test.insert({name:"jingyue"}) // 插入了100条数据
  5. 查询数据
    db.test.find();
    db.test.find();

    db.test.find().toArray();
    db.test.find().toArray();

    db.test.find().pretty();
    db.test.find().pretty();

    算出test表有多少条数据
    db.test.find().count();
    指定不用查出来的数据
    db.test.find().skip({name:'jing'});//包含{name:'jing'}不用查
    指定查出的条数
    db.test.find().limit(10);//查出十条
    查看索引
    db.test.getIndexes();
    查询当前版本号
    db.version() // 3.2.8
    查看当前库所有集合名
    //新创建的集合并不在数据库中, 要显示它,我们需要向集合里插入一些数据
    db.getCollectionNames(); // [ "test" ]
    show collections; // test
    查看当前库
    db.getName(); // test
    切换集合
    use teacher;
    db.getName(); // teacher
  6. 删除
    删除数据库
    db.dropDatabase();
    删除数据表
    db.test.drop();
    删除数据
    db.test.remove({name:'jingyue'});//删除test表中name为jingyue的数据
  7. 更新Update
    update() 方法用于更新已存在的文档。语法格式如下:
    db.test.update({name:'jing'},{$set:{name:'yue'}},false,true)
    参数说明:

**第一个参数 **: update的查询条件,类似sql update查询内where后面的。
第二个参数: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
**第三个参数 **: 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
第四个参数: 可选,默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
第五个参数:可选,抛出异常的级别,一般用不到。

**实例:**
    //此处有两个参数第一个参数表示查找的地方,第二个表示要改的地方        
     db.test.update({name:'jing'},{sex:12});
    // 此处表示若更改则会把X,Z的值覆盖 使用set能够避免覆盖更改一条不存在的数据的时候
    // 默认插入到数据库中 
     db.test.insert({x:100,y:100,z:100});
     db.test.update({z:100},{$set:{y:99}}); 
    //此处增加TRUE 表示增加一条不存在的数据 
     db.test.update({name:'yue'},{sex:18},true);

express 框架

nodejs模块: https://www.npmjs.com

Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用,和丰富的 HTTP 工具。
使用 Express 可以快速地搭建一个完整功能的网站。
Express 框架核心特性:

  • 可以设置中间件来响应 HTTP 请求。
  • 定义了路由表用于执行不同的 HTTP 请求动作。
  • 可以通过向模板传递参数来动态渲染 HTML 页面。
    express-generatorexpress 应用生成器通过应用生成器工具express可以快速创建一个应用的骨架

全局安装

sudo npm install -g express-generator
其中 -g 参数:全局

在当前文件夹下生成blog项目

 express -e blog

进入blog项目目录(以下操作都在这个目录下进行)

 cd blog
  • app.js 入口文件
  • bin 启动程序文件
  • package.json 项目名称版本
  • public 放着静态资源文件
  • routes 路由文件
  • views 视图目录、放着模板视图、俗称页面。


    blog项目创建完成

安装所有依赖包

 npm install
安装完后会出现这个目录

开启项目

npm start
开启后显示

浏览器输入网址加端口号,默认端口号为3000

192.168.23.128:300
网页显示

完成以上步奏说明框架已搭好,可以开发了。


扩展

在Linux系统里,MongoDB 服务器启动都需要输入一长串代码,我们来制作一个sh文件,每次只需要启动下文件就好(mongo.sh)

    #!/bin/bash
    cd /home/jingyue/mogondb/bin/ ./mongod --dbpath=../test_db(mongodb数据库)

执行 mongo.sh

 sh mongo.sh
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容