2016年数据库排行榜前十数据库简单介绍:
- Oracle是甲骨文公司的,使用需要付费,非开源的
- MySQL目前很多公司都在使用,已经被甲骨文收购,之前是开源的,但是现在也有很多功能已经开始封装,非完全开源了
- windows上的数据库,早年间很多游戏平台使用的是这个数据库
- MongoDB 近年来发展起来的文档类型数据库,增长较快,配合nodeJS使用
- PostgreSQL 暂时不知道
- DB2...
- Cassandra...
- Microsoft Acess...
- SQLite 小型,轻量型关系型数据库,目前安卓,苹果端机子本地存储使用的是SQLite数据库
- Redis 是一种nosql,其他暂时不知道...
MongoDB简介
MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据库存储方案,MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.
MongoDB安装
Linux平台安装MongoDB-->下载地址
选择对应的版本进行下载,在此,我选择的是ubuntu16.04 64位的版本的下载
下载指令:curl -o https://www.mongodb.com/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.9.tgz/
解压指令:tar -zxvf mongodb-linux-x86_64-ubuntu1604-3.2.9.tgz
将解压包拷贝到指定目录:mv mongodb-linux-x86_64-ubuntu1604-3.2.9 指定目录(在此,我拷贝到了/usr/local/mongodb)
Mongodb可执行文件位于bin目录下,所以可以将其添加到path路径中:
export PATH=<mongodb-install-directory>/bin:$PATH
在此我的为:export PATH = /usr/local/mongodb/bin:$PATH
创建数据库目录:
Mongodb数据存储在data目录的db目录下,但是这个目录在安装过程中不会自动创建,所以需要手动创建data目录,并在data目录中创建db目录
注意:/data/db是MongoDB默认的启动数据库路径(--dbpath)
mkdir -p /data/db 如果数据库目录不是/data/db目录,可以通过--dbpath来指定
# 进入mongodb/bin目录下,执行./mongod启动mongodb ./mongod &这是表示在后台启动(如果不这样启动,那么这个窗口就不能使用了,他会在前台执行...针对ubuntu服务器)
# MongoDB后台管理Shell
如果需要进入MongoDB后台管理,你需先打开mongodb装目录的下的bin目录,然后执行mongo命令文件.
MongoDB Shell是MongoDB自带的交互式javascript shell,用来对mongodb进行操作
cd /usr/local/mongodb/bin
./mongo
......
MongoDB web用户界面
MongoDB提供了简单的HTTP用户界面,如果你想启用该功能,需要在启动的时候指定参数 --rest.
.mongod --dbpath = /data/db --rest
MongoDB的web界面访问端比服务的端口多1000.如果你的mongodb运行端口使用27017,你可以在端口号为28017访问web用户界面.即http://localhost:28017.
创建数据库
# 创建语法如下:
use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库
实例:
>use edwin
switched to db edwin
>db
edwin
# 如果想查看所有数据库,可以使用show dbs命令,
刚创建的数据库edwin并不会被show出来,如果要显示,我们需要向edwin插入一些数据
删除数据库
# MongoDB删除数据库的语法格式如下:
db.dropDatabase()
删除当前所使用的数据库,默认情况下test
实例:
删除我们之前创建的数据库edwin
>show dbs 查看当前所有的数据库
....
>use edwin 进入之前创建的数据库 edwin
...
>db.dropDatabase() 删除数据库edwin
...
>show dbs 查看是否已经删除成功
# 删除集合的语法格式如下
db.collection.drop()
MongoDB插入文档
文档的数据结构和json基本一样,所有存储在集合中的数据都是BSON格式
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON
# 插入文档
MongoDB使用insert()或save()方法向集合中插入文档,语法如下:
db.COLLECTION_NAME.insert(document);
# 实例
以下文档可以存储在MongoDB的edwin数据库的col集合中
>db.col.insert({title:"MongoDB教程",
description:"MongoDB是一个Nosql数据库",
byb:"哈哈",
tags:["MongoDB","database","NoSQL"],
likes:100
})
以上实例中col是我们的集合名,如果该集合不存在该数据库中,mongoDB会自动创建该集合并插入文档,
查看已插入文档:
>db.col.find()
# 第二种插入数据的库方式
我们可以将数据定义为一个变量
> document = ({title:"haha"});
执行后显示该变量的值
然后执行插入操作
>db.col.insert(document)
# 插入文档也可以使用db.col.save(document)命令.
如果不指定_id字段save()方法类似与inset方法,如果指定id字段,
则会更新该_id的数据.
MongoDB更新文档
MongoDB使用update()和save()方法来更新集合中的文档
#update()方法
语法格式:
db.collection.update(
<query>,
<update>,
{
upset:<boolean>,
multi:<boolean>,
writeConcern:<document>
}
)
参数说明:
query:update的查询条件,类似sql update查询内的where后面的.
update:update的对象和一些更新的操作符(如$,$inc...),也可以理解为sql update查询内的set后面的
upset:可选,这个参数的意思是,如果不存在update的记录,是否插入objNEW,true为插入,默认是false,不插入.
multi:可选,mongoDB默认是false,只更新找到的第一条记录,如果这个参数为ture,就
把按条件查出来的多条记录全部更新.
writeConcern:可选,抛出异常的级别
实例:
db.col.update({''title':'MongoDB教程'},{$set:{'title':'MongoDB'}})
db.col.find().pretty()
注意:find后加pretty(),是说让查找的内容以集合的形式展示,一行一条记录,比较直观
# save方法
save()方法通过传入的文档来替换已有的文档,语法格式如下:
db.collection.save(
<document>,
{
writeConcern:<document>
}
)
参数说明:
document:文档数据
writeConcern:可选,抛出异常的级别
实例:
db.col.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [ "mongodb", "NoSQL" ],
"likes" : 110
})
db.col.find().pretty() 进行查询是否更新完成
MongoDB删除文档
MongDB remove()函数式用来移除集合中的数据,MongoDB数据更新可以使用
update()函数,在执行remove函数前先执行find()命令来判断执行的条件是否正确,这是
一个比较好的习惯
语法格式:
db.collection.remove(
<query>,
<justOne>
)
参数说明
query:(可选参数)删除的文档的条件
justOne:(可选参数)如果设置为true或1,则只删除一个文档
writeConcern:(可选参数)抛出异常的级别)
>db.col.remove({'title':'MongoDB教程'})
WriteResult({"nRemoved":2}) #删除了两条数据
>db.col.find() 查看是否已经删除成功
MongoDB查询文档
>db.COLLECTION_NAME.find()
find方法以非结构的方式来显示所有文档.
如果你需要以易读的方式来读取数据,可以使用pretty()方法,语法格式如下
>db.COLLECTION_NAME.find().pretty()
除了find()方法之外,还有一个findOne()方法,他只返回一个文档