MongoDB介绍
Nosql介绍
- NoSQL(NoSQL = Not Only SQL),意思就是不仅仅是SQL,他指得是非关系型的数据库,是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如遵循SQL标准、ACID属性、表结构等。NoSQL最早被提出是在20世纪80年代,当时更多是强调的是伊关系数据库区别对待,最近这些年被提及的更多的是强调协助解决大数据等相关问题。NoSQL在大数据时代有自己的意义。
- NoSQL和传统数据库简单对比:
- 非结构型数据库。没有行和列的概念。用JSON来存储数据。几何就相当于”表“,文档就相当于”行“。
MongoDB介绍
- MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富的,最像关系数据库的NoSQL数据库。它支持的书库结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是:高性能、易部署、易使用、存储数据非常方便。
MongoDB的安装
- mac下安装MongoDB:
- 打开Finder输入
shift + command + G
搜索/usr/local,默认情况下在Finder中是看不到 /usr 这个目录的(终端用得溜的请略过)。
- 将下载好并解压的文件夹重命名为mongodb放入当前文件夹。
- .配置环境变量,打开终端,输入“open -e .bash_profile”,在打开的文件中加入:
export PATH=${PATH}:/usr/local/mongodb/bin
command + s
保存后退出。
- 输入"source .bash_profile"使配置生效。输入"mongod -version",回车后如果看到下面的版本号则说明MongoDB已经成功安装到了Mac上。
- 在根目录下新建 data 文件夹,里面再建一个 db 文件夹,安装MongoDB时并不会自动生成,需要我们手动创建,可以在命令行输入创建,也可以直接在Finder中手动新建。
sudo mkdir -p /data/db
-
打开终端输入"sudo mongod"启动服务端。打开浏览器,输入localhost:27017 ,会出现这样一行文字。
It looks like you are trying to access MongoDB over HTTP on the native driver port.
-
重新打开一个新的终端,输入"mongo",可执行对数据库进行操作,要停止MongoDB的时候一定要正确的退出,不然下次再次连接数据库会出现问题,使用下面的两行代码可以完成这一操作。
use admin;
db.shutdownServer();
- 可视化工具:RoboMongo是一个跨平台的MongoDB GUI客户端管理工具,支持Windows、MacOS、Linux。其特点是支持到MongoDB服务器的SSL连接,还支持使用SSH隧道连接。RoboMongo的查询界面同时支持树视图、表格视图、文本视图三种,也可以保存查询结果供以后使用。 Robomongo 可以选择适合自己的版本下载。
MongoDB数据库操作
连接数据库
- 上面介绍mac安装mongodb数据库的时候也介绍了如何连接数据库,首先用一个终端输入"sudo mongod"建立连接,然后启动另一个终端输入"mongo"开始执行操作,比如输入"show dbs"看一下目前有哪些数据库。
创建、查看、删除数据库
- 假设我们要创建如下的一个数据库aniu
- 使用数据库、创建数据库:
use aniu
如果真的想把这个数据库创建成功,那么必须插入一个数据。
数据库中不能直接插入数据,只能往集合(collections)中插入数据。
- 下面命令表示给aniu数据库的user表中插入数据。
db.user.insert({"name": "xiaoming"});
注意:当我们use数据库但没有insert内容的时候,使用show dbs不会看到我们建立的数据库,只有加入内容后,数据库才真正建立成功。
- 使用
show collections
可以看我们当前数据库有哪些表(集合)。- 使用
db.user.find()
可以看表中的数据。 - 使用
db.user.find({"age": 22})
可以查找指定年龄为22的数据。 - 使用
db.user.find({"age":{$gt:22}})
查找age>22的数据。 - 使用
db.user.find({"age":{$lt:22}})
查找age<22的数据。 - 使用
db.user.find({age:{$gte:22}})
查找age>=22的数据。 - 使用
db.user.find({age:{$lte:22}})
查找age<=22的数据。 - 使用
db.user.find({"name":/mongo/})
查找name中包含mongo的数据(模糊查询)。 - 使用
db.user.find({"name":/^mongo/})
查找name中以mongo开头的数据(模糊查询)。 - 使用
db.user.fn({},{name:1})
查询指定列的name数据。 - 使用
db.user.find().sort({age:1})
按升序查询年龄。 - 使用
db.user.find().sort({age:-1})
按降序查询年龄。 - 使用
db.user.find({"name":"zhangsan","age": 22})
查找name=zhangsan,age=22的数据。 - 使用
db.user.find().limit(5)
查询前5条数据。 - 使用
db.user.find().skip(10)
查询10条以后的数据。 - 使用
db.user.find( ).skip(5).limit(10)
可用于分页查找。 - 使用
db.user.find({$or:[{"age":22},{"age":25}]})
可找age=22或者age=25的数据 - 使用
db.user.findOne()
表示查询第一条数据。 - 使用
db.user.find().count()
查询记录条数,统计数量。
- 使用
- 使用
db.dropDatabase()
可以删除数据库。- 使用
db.user.drop()
可以删除数据库中的表。 - 使用
db.user.remove({"age":12})
可以删除数据。 - 使用
db.user.remove({})
会删除该表所有数据。 - 使用
db.user.remove({"sex":"男"},{justOne:true})
可以只删除一条数据。
- 使用
修改数据
- 修改里面还有查询条件。你要改谁,告诉mongo。查找名字叫做小明的,把年龄改为16岁:
db.student.update({"name": "小明"},{$set:{"age":16}})
注意如果不出现$set
则表示完整替换。
db.student.update({"sex": "男"},{$set:{"age":16}},{multi:true})
添加第三个参数可以一次更改多条数据,不然的话一次只能修改一条数据。