mongodb 使用
前言
- MongoDB是一个基于分布式文件存储的数据库
- 由C++语言编写
- 旨在为WEB应用提供可扩展的高性能数据存储解决方案
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
非关系型数据库,又叫nosql,缓存型,使用场景多是解决大规模数据集合多重数据种类
特点
高性能、易部署、易使用,存储数据非常方便
在 Windows 系统上安装
- 下载
https://www.mongodb.com/download-center/community
- 安装配置
- 安装好之后,找到对应目录,找到 bin 点进去,把地址复制去到此电脑环境变量的 path 里新建一条粘贴进去保存就可以了
- 还要找安装的目录里面手动的新建一个文件夹为 data ,再在 data 文件夹里面新建一个 db 的文件夹把 db 文件的路径复制下来
- 打开 DOS 输入:
mongod --dbpath 右击粘贴刚才复制的地址(回车就可以了)
如果你是安装在 c盘(其他盘也一样)的话一定要注意你的地址是否存在空格
如果存在空格的话一定要给地址添加双引号("")引起来
- 把刚刚的 DOS 最小化,再开一个 DOS 输入:
mongo (回车如果显示版本号就是成功了)
在 mac 系统上安装(小编使用的是window ,只能在这简单说一下,也可以参考一下面的这篇文章)
https://www.cnblogs.com/whitebai/archive/2019/10/15/11680744.html
在Mac OS上面安装MongoDB,你可以通过编译源代码来安装 ,也可以在Mac OS上使用Homebrew安装。
使用Homebrew安装MongoDB:
$ brew update
$ brew install mongodb
启动 MongoDB
$ mongod --config /usr/local/etc/mongod.conf
MongoDB命令行管理 shell
$ mongo
MongoDB术语/概念
MongoDB 集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
MongoDB 文档
文档是一个键值(key-value)对(即JSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:
{“genres”: [“犯罪”,“剧情” ],“title”: “肖申克的救赎”},
{“genres”: 123,“title”: “肖申克的救赎”}
数据库常用命令
(1)Help查看命令提示
help
db.help()
db.test.help()
db.test.find().help()
(2)创建/切换数据库
use music
(3)查询数据库
show dbs
(4)查看当前使用的数据库db/db.getName()
(5)显示当前DB状态
db.stats()
(6)查看当前DB版本
db.version()
(7)查看当前DB的链接机器地址
db.getMongo()
(8)删除数据库
db.dropDatabase()
Collection集合操作
(1)创建一个集合
db.createCollection(“collName”, {size: 20, capped: true, max: 100});
db.collName.isCapped(); //判断集合是否为定容量
(2)得到指定名称的集合
db.getCollection(“account”);
(3)得到当前db的所有集合
db.getCollectionNames();
(4)显示当前db所有集合的状态
db.printCollectionStats();
添加、修改与删除集合数据
(1)添加
db.users.save({name: ‘zhangsan’, age: 25, sex: true});
db.users.insert({name: ‘zhangsan’, age: 25, sex: true})添加多条
db.users.insert([
{“username”:“小王”,age:18,“adress”:“湖南”},
{“username”:“小明”,age:19,“adress”:“广东”},
{“username”:“小李”,age:18,“adress”:“四川”},
{“username”:“小丽”,age:20,“adress”:“武汉”},
{“username”:“小红”,age:21,“adress”:“湖北”}
])
(2)修改
db.users.update({age: 25}, {$set: {name: ‘changeName’}}); 相当于:update
users set name = ’ changeName’ where age = 25;
(3)删除
db.users.remove({age: 132});
集合数据查询
(1)查询所有记录
db.userInfo.find();
相当于:select* from userInfo;
(2)查询去重后数据
db.userInfo.distinct(“name”);
相当于:select distict name from userInfo;
(3)查询age = 22的记录
db.userInfo.find({“age”: 22});
相当于: select * from userInfo where age = 22;
(4)查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo whereage > 22;
(5)查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age < 22;
(6)查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
(7)查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
(8)查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
(9)查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
select * from userInfo where name like ‘%mongo%’;
(10)查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
相当于: select * from userInfo where name like ‘mongo%’;
(11)查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
(12)查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
(13)按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
(14)查询name = zhangsan, age = 22的数据
db.userInfo.find({name: ‘zhangsan’, age: 22});
相当于:select * from userInfo where name = ‘zhangsan’ and age = ’22’;
(15)查询前5条数据
db.userInfo.find().limit(5);
相当于:select top 5 * from userInfo;
(16)查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (select top 10 * from userInfo);
(17)查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
(18)or与 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
(19)查询第一条数据
db.userInfo.findOne();
相当于:select top 1 * from userInfo;db.userInfo.find().limit(1);
(20)查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;