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});

posted @ 2020-04-11 17:31  海角之上  阅读(124)  评论(0编辑  收藏  举报