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
- Oracle 大型项目使用商业收费的
- MySQL 集群
- Microsoft SQL Server
- MongoDB 文档存储
- PostgreSQL
- DB2
- Cassandra
- Microsoft Access
- SQLlite
- Redis
二、MongoDB数据库安装与操作
MongoDB 数据库官网 http://www.mongodb.com
MongoDB数据库下载地址https://www.mongodb.com/download-center?jmp=nav#community
mongoDB的安装步骤
-
到官网下载MongoDB数据库压缩包到服务器上
wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.8.tgz* -c 参数 :支持断点续传 -
解压刚刚下载的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 //自己创建专门用来放数据库的文件 -
编写开启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的增、删、改、查
- 进入数据库命令,MongoDB的默认端口:27017
/home/scort/mongodb/bin/mongo - 创建数据库
新创建的并不在数据库的列表中, 要显示它,我们需要向 数据库插入一些数据
use test //use 自定义集合名也可称库名
db; - 查看数据库使用情况查询
show dbs; - 使用 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条数据 - 查询数据
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 - 删除
删除数据库
db.dropDatabase();
删除数据表
db.test.drop();
删除数据
db.test.remove({name:'jingyue'});//删除test表中name为jingyue的数据 - 更新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-generator是 express 应用生成器通过应用生成器工具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
网友评论