一、概念
MongoDB是一个基于分布式文件存储的数据库,有C++语言编写,旨在为WEB应用提供可扩展性的高性能数据存储解决方案。是目前世界上应用最广泛的nosql数据库。
二、特点及优缺点
MongoDB的特点:高性能、易部署、易使用,方便存储
MongoDB优缺点:
优点:
面向文档存储的数据库(数据存储是BSON格式的)
有丰富的查询指令
支持索引
具有分片系统
无模式
缺点:
存储占用空间大
不支持事物
不维护32位的系统了
注: 和JSON相比,用 BSON主要会实现以下三点目标:
1.更快的遍历速度
2.操作更简易
3.增加了额外的数据类型
三、对比MySQL
MongoDB和MySQL的对应
MySQL MongoDB 解释
database database 数据库
table collection 表/ 集合
row document 记录行 / 文档
column filed 字段 / 域
index index 索引
四、命名规范
数据库的命名规范:通过标识符,一般是utf-8字符串,不能为空,不能用local/admin/config这三个
集合的命名规范:不能是空字符串,也不能出现-,0等,不能以system,$开头
五、Mongo的基础指令
- 关于数据库
show dbs 获取当前所有的数据库
db 查询当前所在的数据库
use database 创建数据库(没有就创建,有就使用;database是数据库的名字,可以自己起,符合命名规范即可)
db.stats() 查询当前数据库的状态(但信息较长,一般用到的是里面的文档,所以一般会toArray转换成数组)
db.help() 查询帮助
db.dropDatabase() 删除当前的数据库
db.version() 获取当前数据库的版本
db.database_name.help 查询任意数据库的帮助
- 关于集合
db.createCollection(“集合名”,{size:20,capped:true,max:100}) 创建一个集合,后面限定信息可不写
db.collection_name.find() 查询当前集合内信息
db.getCollection("account"); 得到指定名称的集合
db.getCollectionNames(); 得到当前数据库下面所有的集合,以数组形式展示出来
show collections 会展示当前db下所有的集合,
db.printCollectionStats(); 显示当前db所有聚集的状态
db.collectionname.drop(); 删除集合
注:capped 定容量db.collName.isCapped(); //判断集合是否为定容量;size优先级最高
下面是假设创建了一个user的集合之后的,一些增删改查操作
//增加
db.user.save({name: ‘zhangsan', age: 25, sex: true});
db.user.insert({name: ‘李四'}) 向当前集合内插入文档数据
db.user.insertOne({"name":"王二"}) 向当前集合内插入一条文档数据
db.user.insertMany([{“name”:"小洪",“genres”:["犯罪",“剧情”]},{“name”:"小红"},
{“name”:"小宏"}]) 向当前集合内插入多条文档数据
// 修改
//所有数据都添加一个age的数据 update只会更新第一个数据
db.user.updateMany({},{$set:{age:20}})
//修改name是王二的数据为name成老王
db.user.updateOne({name:"王二"},{$set:{name:"老王"}})
//修改年您是25的数据中name改为changeName
//相当于:update user set name = ‘changeName' where age = 25;
db.user.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
//1/修改的数据不存在---第一个参数false(不添加)true(添加) 不写默认值为false
//2/数据有重复的---第二个参数true符合条件的数据均修改,false默认修改第一条数据
//相当于:update user set age = age + 50 where name = ‘李四';
db.user.update({name: '李四'}, {$inc: {age: 50}}, false, true);
//相当于:update user set age = age + 50, name = ‘hoho' where name = ‘李四';
db.user.update({name: '李四'}, {$inc: {age: 50}, $set: {name: 'hoho'}},false, true);
//删
db.user.remove({age: 20}); 会删除所有满足条件的
db.user.remove({age: 20},true); 只会删除第一条
db.user.deleteOne({"name":"张三"});
db.user.deleteMany({age:20})
db.user.remove({}) 删除集合中所有的数据
//查
db.user.find() 查询所有记录
db.user.distinct("name"); 查询去重后数据
db.user.find({"age": 22}); 查询age = 22的记录
db.user.find({age: {$gt: 22}}); 查询age > 22的记录
db.user.find({age: {$lt: 22}}); 查询age < 22的记录
db.user.find({age: {$gte: 25}}); 查询age >= 25的记录
db.user.find({age: {$lte: 25}}); 查询age <= 25的记录
db.user.find({age: {$gte: 23, $lte: 26}}); 查询age >= 23 并且 age <= 26
db.user.find({name: /mongo/}); 查询name中包含 mongo的数据
db.user.find({name: /^mongo/}); 查询name中以mongo开头的
db.user.find({}, {name: 1, age: 1}); 查询指定列name、age数据
db.user.find({age: {$gt: 25}}, {name: 1, age: 1}); 查询指定列name、age数据, age > 25
升序: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().limit(10).skip(5); 限制数据量/几条数据后
db.user.find({$or: [{age: 22}, {age: 25}]}); or与 查询
db.user.findOne(); 查询第一条数据
db.user.find({age: {$gte: 25}}).count(); 查询某个结果集的记录条数
db.user.find({sex: {$exists: true}}).count(); 查询某一项的记录数目
最简单的增删改查:
db.uses.find()
db.uses.insert()
db.uses.remove()
db.uses.update()
六、MongoDB的安装
分Windows系统和Mac
Windows系统的安装方法:
第一步:下载安装包官网下载MongoDB,下载好了不要急着双击安装
第二步:在你计算机的一个盘符根目录下面(如D 盘)创建一个mongodb的文件夹,用来安装你的安装包。
也在其根目录下再创建一个data文件夹,打开data建一个db文件夹,因为MongoDB会默认找这个文件夹建库。
第三步:双击你下载的MongoDB安装包,安装类型选择custom,一路安装,路径选择mongodb文件夹就可以了。
第四步:找到mongodb文件夹下的bin文件夹,先打开mongod.exe,再执行mongo.exe就可以运行你的数据库了。
第五步:可以在浏览器中输入127.0.0.1:27017测试安装成功。
Mac系统的安装方法:
在Mac OS上面安装MongoDB,你可以通过编译源代码来安装 ,也可以在Mac OS上使用Homebrew安装。
这里介绍使用Homebrew安装MongoDB。
第一步:更新Homebrew的package数据库:
$ brew update
$ brew install mongodb
第二步:启动MongoDB
$ mongod --config /usr/local/etc/mongod.conf
第三步:使用MongoDB
$ mongo