MongoDB的引言
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 Nosql 技术门类 redis 内存型 mongodb 文档型
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB的特点
- 面向集合存储,易存储对象类型的数据
- 支持查询,以及动态查询
- 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言
- 文件存储格式为BSON(一种JSON的扩展)
- 支持复制和故障恢复和分片
MongoDB的安装和使用
- 下载mongoDB的安装包(最新版本3.6,只能在64位系统安装)这里使用的3.0.6版本
- 上传至linux系统中解压当前的linux系统
- 将解压的文件为了方便目录进行重命名(这步可以跳过)
- 进入mongodb的文件夹中查看目录
- 在bin目录中存在大量mongodb使用的命令
- 启动mongoDB数据库服务./mongod --port 27017 --dbpath /root/data
注意:
启动时要求存放数据的目录必须存在
默认的端口号是27017 可以通过--port 指定端口启动
- 出现如下结果代表启动成功
MongoDB的shell(客户端)操作
- 进入mongo的bin目录中找到如下指令
- 使用如下命令连接到mongodb的服务中
注意:
- 连接到mongodb后,mongo和mysql数据库有点像,先是一个一个库的概念,操作之前需要先选中库
- use 数据库名称
注意:
use命名 存在库使用当前库 不存在则创建当前库
- 显示创建集合“t_user”);
- 隐式创建集合创建集合同时添加元素
- db 命令显示当前库
- show collections;
- 向集合中插入数据db.集合名称.insert({name:'xiaohei',age:23,sex:true});
- 向集合中插入多条数据db.集合名称.insert([{name:'xiaohei',age:23,sex:true},...]);
- db.集合名称.remove({条件}) //删除满足条件的数据
- db.集合名称.remove({不加任何条件})//删除所有文档 保留空的集合
- db.集合名称.update({条件},{更新内容});
- db.集合名称.update({"name":"zhangsan"},{name:"11",bir:new date()}) --这个更新是将符合条件的全部更新成后面的文档,相当于先删除在更新
- db.集合名称.update({"name":"xiaohei"},{$set:{name:"mingming"}}) --保留原来的值修改,但是只更新符合条件的第一条数据
- db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true}) ---保留原来数据更新,更新符合条件的所有数据
- db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true,upsert:true}) ---保留原来数据更新,更新符合条件的所有数据 没有条件符合时插入数据
- db.t_user.update({name:"zhangsan"},{$inc:{age:1}},{upsert:true,multi:true}) --在保留原始数据同时给符合条件的所有age这列的值自增指定的大小
- db.集合名称.drop();
- db.集合名称.find();
- db.集合名称.find({条件})
- db.集合名称.find({条件},{显示字段,name:1,age:1}) 1 显示 0 不显示 1和0 不能混合出现
- 查询结果排序:db.集合名称.find().sort({条件name:1,age:1}), 1 升序 -1 降序
- 分页查询:db.集合名称.find().sort({条件}).skip(起始条数).limit(显示总记录数);
- 总条数:db.集合名称.count();|db.t_user.find({"name":"aa"}).count();
- 模糊查询:使用正则表达式db.集合名称.find({"name":/go/})
- 等值(==)查询张三"});
db.user.find({name:{$eq:"张三"}}); - 且 ($and) 查询db.t_user.find({name:"zhangsan",age:12});
db.t_user.find({$and:[{name:"zhangsan"},{id:10}]}) - $or使用:
- db.集合名称.find({
$or:[
{key:value},{age:{$gte:20}}
]
}); - db.集合名称.find({“age”:{“$lte”:18,”$gte”:30}})
- db.t_user.find({$nor:[{name:"chenyn"},{age:26}]});
- $gt大于 $gte大于等于 $lt 小于 $lte 小于等于 $eq 等于:
- $nor查询使用
- 查看系统中默认的所有库show dbs;
注意:
默认只有一个local库
还有一个默认隐藏不可见的数据库
- 选中一个库
- 删除一个库db.dropDatabase();
注意: 选中那个库,删除的就是当前选中的库
- Mongodb的数据库中,库中是一个一个集合的概念,选中库后要创建一个一个的集合,集合类似于传统的关系型数据库中的表
- 查看mongo 中当前库
- 显示当前库中的所有集合
- Mongo中插入数据
- Mongo中的删除数据
- Mongo中的修改数据
- 删除集合
- 查询集合
- shell非正常关闭时,下次无法连接问题解决方案:
- 删除数据目录中的mongo.lock文件即可