mongodb安装
window系统安装
注意:**安装mongodb一定要安装2版本的 npm install mongodb@2装的是2版本的最高版**
- 把mongodb安装到某一个盘符下(D)
- 创建数据目录 D:data/db文件夹
- 找到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
MongoDB概念
MongoDB是一个基于分布式文件存储的数据库。
由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
是世界上目前用的最广泛的nosql数据库noSql 翻译过来 not only sql 不仅仅是sql 他就是一个非关系型数据库
它的特点:高性能、易部署、易使用,存储数据非常方便
mongodb的优缺点
mongodb的优点
-
面向文档储存的数据库(BSON格式存储)
-
具有丰富的查询指令
-
支持索引
-
具有分片系统
-
无模式
mongodb的缺点
-
占用空间非常大(bson数据的存储)
-
不支持事务
-
目前已经不维护32位的系统的了
关系型数据库 和 非关系型数据库
关系型数据库,是指采用了关系模型来组织数据的数据库关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
关系型数据库的优点:容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解使用方便:通用的SQL语言使得操作关系型数据库非常方便易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
解释:
数据分片,将整体数据分摊在多个存储设备上,这样每个存储设备的数据量相对就会小很多,以此满足系统的性能需求
无模式:各种形式的NoSQL数据库有个共同点,那就是它们都没有模式。若要在关系型数据库中存储数据,首先必须定义“模式”,也就是用一种预定义结构向数据库说明:要有哪些表格,表中有哪些列,每一列都存放何种类型的数据。必须先定义好模式,然后才能存放数据。
事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
mongo的基础指令
show dbs 获取你当前所有的数据库(如果数据库为空 查看不出来)
use dataBase_name 创建数据库(没有-创建/存在-使用)
db 指查询你当前的数据库
db.stats() 查询你当前数据库的状态
db.dropDatabase() 删除你当前的数据库
db.help() 查询帮助
db.version() 获取你当前数据库的版本
db.database_name.help() 查询任意数据库的帮助
db.collection_name.find() 查询你当前集合内的信息
创建数据库之后查看没有出现music,需要写入一个文档集合album;
insert插入 db.album.insertOne({‘title’:’xxxx’}),或者用save
查看 db.album.find();
插入多条数据insertMany([{},{},{}])/insert
插入insert insertMany save insertOne
mongoDB-文档
文档是一个键值(key-value)对(即BSON)。
MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:{"genres": ["犯罪","剧情" ],"title": "肖申克的救赎"}
mongoDB-集合
集合就是 MongoDB 文档组,类似于 RDBMS
(关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,
这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性
Collection聚集集合操作
1、创建一个聚集集合(标准创建)
//第二个参数可以不要
db.createCollection("collName", {size: 20, capped: true, max: 100});
db.collName.isCapped(); //判断集合是否为定容量 只有第二个传入参数 才是定容量
不传参数 默认为flase
2、得到指定名称的聚集集合
db.getCollection("account");
3、得到当前db的所有聚集集合
db.getCollectionNames();
4、显示当前db所有聚集的状态
db.printCollectionStats();
5、删除集合
db.collectionname.drop(); true表示已经删掉了
解释:
name:集合的名字
capped:是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义
size:限制集合使用空间的大小,默认为没有限制
max:集合中最大条数限制,默认为没有限制
autoIndexId:是否使用_id作为索引,默认为使用(true或false)
size的优先级比max要高
Collection聚集集合操作
1、添加
db.users.save({name: ‘zhangsan', age: 25, sex: true});
2、修改
所有数据都添加一个artist
db.albums.updateMany({},{$set:{artist:‘哈哈’}})
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName' where age = 25;
1、修改的数据不存在---第一个参数false(不添加)true(添加)
2、数据有重复的---第二个参数true符合条件的数据均修改,false默认修改第一条数据
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi';
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';
3、删除
db.users.remove({age: 132});
//向所有数据中添加数据artist: '哈哈'
db.albums.updateMany({}, {$set:{artist: '哈哈'}})
//修改title值是团子中的artist数据值
db.albums.update0ne({title: '团子'},{$set:{artist: '阿离'}})
//删除一条数据(2个方法)
db.albums.delete0ne({artist:‘哈哈'})
db.albums.remove({artist: '哈哈'}, true)
//删除所有数据中有artist:‘哈哈'的整条数据
db.albums.deleteMany({artist: '哈哈'})
//全删除-没有任何信息
db.albums.remove({})
增删改查的实现
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 where age >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.限制数据量/几条数据后
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();
相当于:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);
20.查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
21.查询某一项的记录数目
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;
希望可以帮助大家哦。。。