Nodejs系列第16章 mongodb1
1) 安装 mongodb软件
https://www.mongodb.com/
选择完全安装
2) 设置环境变量
找到安装目录,找到mongo命令所在位置:C:\Program Files\MongoDB\Server\3.2\bin
将命令位置添加到环境变量:
我的电脑(计算机) 点击鼠标右键-> 属性 -> 高级系统设置 -> 高级 -> 环境变量 -> 修改PATH的值(添加一个分号,将数...)
3) 创建文件夹
在非系统盘(D盘)下创建一个文件夹mongodb,再创建两个子文件夹 db 和 log
d:\mongdb
d:\mongdb\db
d:\mongdb\log
4) 将mongodb挂载成windows服务
使用命令挂载服务
mongod --dbpath "d:\开发区\mongodb\db" --logpath "d:\开发区\mongodb\log\MongoDB.log" --install --serviceName "MongoDB"
服务如何查看
在“计算机”上点鼠标右键 -> 管理 ->服务与应用程序 -> 服务
运行命令 services.msc
补充说明服务的命令
net start mongdb //开启服务
net stop mongdb //关闭服务
sc delete mongdb //卸载服务
5) 常见问题
32位操作系统的问题
必须添加存储引擎设置: --storageEngine mmapv1 mongod --storageEngine mmapv1 --dbpath "d:\mongdb\db" --logpath "d:\mongdb\..."...
win8或win10操作的权限问题
必须以管理员身份运行cmd命令行,再执行挂载服务命令
6. 数据库基础命令
1) 进入数据库管理模式
在命令行中运行:mongo 进入数据库管理模式
在数据库管理模式中只能执行数据库命令,不能执行其它命令
exit 退出数据库管理模式
2) 常用的命令
a. 数据库命令
显示所有的数据库列表
show dbs
创建数据库/进入数据库
use 数据库名
如果数据库名不存在,则创建
如果数据库已存在,则进入
查看当前数据库是谁
db
删除数据库
db.dropDatabase();
b. 集合的命令
显示当前数据库中的所有集合
show collections
创建集合
db.集合名.insert({});
通常,在创建数据时自动创建集合,不需要单独创建
删除集合
db.集合名.drop();
3) 文档(数据)的操作【重点】
a. 新增文档(数据)
db.集合名.insert({JSON数据});
db.集合名.save({JSON数据});
insert 和 save 方法的区别:
.insert() 向集合中插入一条数据【推荐使用】
.save() 向集合中添加一条数据,如果集合中已经存在该数据则更新
b. 查询文档(数据)
db.集合名.find(); 【重点】//查找当前集合中的所有数据
db.集合名.find({条件对象}); //符合条件的数据被查出来
db.集合名.findOne(); //查找集合中的第一条数据
db.集合名.find().pretty(); //将找到的数据以格式化的结果显示出来
c. 修改数据
db.集合名.update(查找对象, 修改结果);
例如:
db.user.update({"username":"张三"},{"age":18});
d. 删除数据
db.集合名.remove({}); //删除当前集合中的所有数据
db.集合名.remove({条件对象});
例如:
db.user.remove({"age":18});
db.user.remove({});
7. 高级用法
1) 按指定条件查询
//查找到所有的女歌星
db.singer.find({"sex":"女"});
//SQL : select * from singer where sex = '女'
//查找所有中国女歌星
db.singer.find({"country":"中国","sex":"女"});
2) 大于
语法:db.集合名.find({字段名:{$gt:值}});
//查找年龄大于50岁的所有数据
db.singer.find({"age":{$gt:50}});
//SQL : select * from singer where age > 50
3) 大于等于
语法:db.集合名.find({字段名:{$gte:值}});
//查找年龄大于等于50岁的所有数据
db.singer.find({"age":{$gte:50}});
4) 小于
语法:db.集合名.find({字段名:{$lt:值}});
//查找年龄小于30岁的所有数据
db.singer.find({"age":{$lt:30}});
5) 小于等于
语法:db.集合名.find({字段名:{$lte:值}});
//查找年龄小于等于30岁的所有数据
db.singer.find({"age":{$lte:30}});
6) 查询指定范围的数据
语法:db.集合名.find({字段名:{$gt:小值, $lt:大值}});
//查找年龄30-0岁之间的所有数据
db.singer.find({"age":{$gt:30,$lt:40}});
//SQL : select * from singer where age>30 and age<40
//SQL : select * from singer where age between 30 and 40
7) $in 子句
语法:db.集合名.find({"字段名":{$in:[数组值]}});
//找出刘德华、张学友、郭富城
db.singer.find({"namme":{$in:['刘德华','张学友','郭富城']}});
//SQL : select * from singer where name in ('刘德华','张学友','郭富城')
8) $nin 子句
语法:db.集合名.find({"字段名":{$nin:[数组值]}});
9) 按数组元素的个数查找
语法:db.集合名.find({"字段名":{$size:数量}});
//查找只有一个代表作的歌手
db.singer.find({"works":{$size:1}});
10) $or 子句
查找多条件时,符合其中一个就找出来
语法:db.集合名.find({$or:[{"字段名":值},{"字段名2":值2}]});
某个活动必须要刘德化参加,另外需要团队的全部女歌手配合演出,领导安排你帮忙打印歌手资料
db.singer.find({$or:[{"name":"刘德华"},{"sex":"女"}]});
//SQL : select * from singer where name="刘德华" or sex="女"
11) 不等于
语法:db.集合名.find({"字段名":{$ne:值}});
12) 取模运算,条件相当于 字段名%10==1 即字段名除以10余数为1的
语法:db.集合名.find({"字段名":{$mod:[10,1]}});
13) $exists
语法:db.集合名.find({"key":{$exists:true|false}});
$exists 字段存在,true返回存在字段key的数据,false返回不存在字段key的数据
8.其它重要语句
1) 排序 sort()
语法:db.集合名.find({}).sort({"字段名":1, "字段名":-1});
说明:1是升序(从小到大),-1是降序(从大到小)
//对所有歌手按年龄进行降序排序
db.singer.find().sort({"age":-1});
db.singer.find().sort({"age":-1, "score":1});
2) 限制输出 limit() skip()
.limit(数字) //限定输出数据的条数
.skip(数字) //跳过指定的数据条数
//只查找年龄最大的三个人
db.singer.find().sort({"age":-1}).limit(3);
//查看年龄在第三、第四、第五的三个人
db.singer.find().sort({"age":-1}).skip(2).limit(3);
扩展:这两个限定输出的语句主要用于分页
数据太多,在一个页面显示不完,可以分多个页面显示数据,就叫分页
场景:现在有100条数据,每页显示10条,一共有多少页?10页
如果当前在第2页上,应当显示哪些数据?11-20之间的数据
3) 返回结果集的条数 count()
语法:db.集合名.find().count();
注意:在加入skip()和limit()这两个操作时,要获得实际返回的结果数,需要一个参数true,否则返回的是符合查询条件的结果总数
db.集合名.find().skip(5).limit(5).count(true);
3) 模糊查询
语法:db.singer.find({"字段名":/值/});
//需求:找出所有姓刘的人
db.singer.find({"name":/刘/i});