MongoDB使用教程

2023-05-16

1、下载:

https://www.mongodb.com/try/download/community
在这里插入图片描述

2、安装

  • 解压下载包后正常步骤安装

  • 创建服务
    在这里插入图片描述
    e:\Application-develop\MongoDB\bin为路径
    datalog文件若安装之后没有,需提前创建
    在cmd中运行以下命令,将相关路径更改成你的即可【注意:cmd要以管理员身份运行,否则无效!!!

    e:\Application-develop\MongoDB\bin>mongod --install --dbpath E:\Application-develop\MongoDB\data  --logpath E:\Application-develop\MongoDB\log\mongodb.log
    

    验证:window键+R,输入services.msc,回车,即可看见已成功创建的mongodb服务
    在这里插入图片描述

  • 启动服务
    在刚刚的cmd中继续运行代码 net start mongodb
    在这里插入图片描述

  • 登录(验证是否安装成功)
    继续输入命令 mongo,可看到详细信息
    在这里插入图片描述
    可通过命令exit退出
    在这里插入图片描述

  • 补充(周边语法)
    删除服务:e:\Application-develop\MongoDB\bin>mongod --remove
    关闭服务:e:\Application-develop\MongoDB\bin>net stop mongodb

3、查看数据库

语法:show databases

仍然是在cmd中进行,输入命令mongo登录成功后,输入查看数据库命令show databases
在这里插入图片描述

4、选择数据库

语法:use dbname [ use +数据库名称 ]
在这里插入图片描述
【注:在mongodb中选择不存在的数据库不会报错,后期若该数据库有数据时,系统将自动创建】

5、查看集合

语法:show collections

6、创建集合

语法:db.createCollection('集合名')
在这里插入图片描述

7、删除集合

语法:db.集合名.drop()
在这里插入图片描述

8、删除数据库

语法:db.dropDatabase()
步骤:先通过use选择数据库,再使用上述命令删除数据库

9、添加数据

语法:db.集合名.insert(JSON数据)
(若集合存在则直接插入,不存在则隐式创建集合后再插入数据)

mongodb底层是使用js引擎实现的,支持部分js语法
如快速插入十条数据:
for(var i=0;i<10;i++){ db.c1.insert({name:'a'+i,age:i}) }

10、查询数据

语法:db.集合名.find(条件,[,查询的列])

条件:
查询所有数据:{}或不写
查询age=6的数据:{age=6}
查询age=6,sex=男的数据:{age=6,sex=‘男’}

查询的列:(可选)
不写:查询全部字段
{age:1}:只显示age列/字段
{age:0}:除了age列/字段,都显示

条件运算符:
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in in
$nin not in

db.c1.find({age:{$gt:3}}) 查找age大于3的数据
db.c1.find({age:{$in:[3,4]}}) 查找age为3,4的数据
db.c1.find({},{age:1) 只看字段为age的列数据(_id依然会显示)
db.find().pretty() 查看所有数据,并格式化的展示

11、修改数据

语法:db.集合名.update(条件,新数据[,是否新增,是否修改多条])

是否新增:指条件匹配不到数据时插入,true为插入,false为不插入(默认)
是否修改多条:将匹配成功的数据都修改,true为都修改,false为只修改一条(默认)

修改器:
$inc 递增
$rename 重命名列
$set 修改列值
$unset 删除列

db.c1.update({username:'z3'},{$set:{username:'z2'}}) 修改z3姓名改为z2
db.c1.update({username:'z2'},{$inc:{age:2}}) 给z2的age增加2

12、删除数据

语法:db.集合名.remove(条件,[,是否删除一条])

是否删除一条:true为是,false为删除多条

13、排序

语法:db.集合名.find().sort(JSON数据)

db.c1.find().sort({age:-1}) 将age列按降序排列
db.c1.find().sort({age:1}) 将age列按升序排列

14、Limit与Skip方法

语法:db.集合名.find().sort().skip(数字).limit(数字)

skip:跳过指定数量(可选)
limit:限制查询的数量
db.c1.find().sort({age:-1}).skip(0).limit(2) 按降序查询两条数据
db.c1.find().sort({age:-1}).skip(1).limit(2) 按降序查询两条数据,跳过排列的第一条数据

在这里插入图片描述

15、实现分页

语法:db.集合名.find().skip().limit()

ex. 数据库1-10条数据,每页展示两条(5页)
第一页:db.c1.find().skip(0).limit(2)
第三页:db.c1.find().skip(4).limit(2)
第五页:db.c1.find().skip(8).limit(2)
skip计算公式:(当前页-1)*每页显示的条数

16、统计总数

语法:db.集合名.find().count()

17、聚合查询

语法:

db.集合名.aggregate([]
    {管道:{表达式}}
     ....
)

常用管道:
$group 将集合中的文档分组,用于统计结果
$match 过滤数据,只要输出符合条件的文档
$sort 聚合数据进一步排序
$skip 跳过指定文档数
$limit 限制集合数据返回文档数

常用表达式:
$sum 总和 $sum:1同count表示统计

$avg 平均
$min 最小值
$max 最大值

分别统计男、女生的年龄和:

db.c1.aggregate([
    {
          $group:{
               _id: “$sex”,
               rs: {$sum:"$age"}
            }
       }
])

分别统计男、女生人数:

db.c1.aggregate([
    {
          $group:{
               _id: “$sex”,
               rs: {$sum:1}
            }
       }
])

统计学生总数和平均年龄:

db.c1.aggregate([
    {
          $group:{
               _id: null,
               total_num: {$sum:1}
               total_avg: {$avg:"$age"}
            }
       }
])

分别查询男、女生人数,按人数升序:

db.c1.aggregate([
    {
          $group:{
               _id: “$sex”,
               num: {$sum:1}
            }
     }
    {
          $sort:{num:1}
    }
])

在这里插入图片描述

18、索引

创建索引:db.集合名.createIndex(待创建索引的列 [,额外选项])

待创建索引的列:{键:1,…,键:-1} (1为升序,-1为降序)
额外选项:设置索引的名称或唯一索引等

删除索引:

全部删除:db.集合名.dropIndexes()
删指定除:db.集合名.dropIndex(索引名)

查看索引:db.集合名.getIndexes()
在这里插入图片描述
给name创建索引并起名othername:
db.集合名.createIndex({name:1},{name:'othername'})
在这里插入图片描述
给name和age添加组合索引:db.集合名.createIndex({键1:方式,键2:方式})
在这里插入图片描述
创建唯一索引:db.集合名.createIndex(待添加索引的列,[unique:列名])
在这里插入图片描述
分析索引:db.集合名.find().explain('executionStats')
在这里插入图片描述
【其中索引扫描方式:COLLSCAN–全表扫描,IXSCAN–索引扫描,FETCH–根据索引去检索指定document】
【可根据分析索引添加后的查找耗时决定是否加索引】

19、MongoDB权限机制

我们发现在DOS窗口直接输入mongo命令即可登录数据库,这样是不够安全的
解决方法:使用权限机制,开启验证模式即可

步骤:
(1)添加超级管理员

  • bin目录下输入mongo命令登录

  • use admin

  • db.createUser({"user":"用户名","pwd":"用户密码","roles":[{role:"root",db:"所属数据库"}]})
    在这里插入图片描述
    在这里插入图片描述

    常用角色种类(role):
    root 超级用户
    readreadWrite 数据库用户角色
    dbAdminuserAdmin 数据库管理角色
    backuprestore 备份恢复角色
    clusterAdminclusterMangerclusterMonitorhostManager 集群管理角色
    readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase 所有数据库角色

    角色说明:
    root:只在admin数据库中可用。超级账号,超级权限
    read:允许用户读取指定数据库
    readWrite:允许用户读写指定数据库

(2)退出卸载服务

  • 在bin目录下,mongod --remove 【要使用管理员身份进行】
    在这里插入图片描述

(3)重新安装需要输入账号密码的服务(在原安装命令基础上加上–auth即可)

  • bin目录下 mongod --install --dbpath E:\Application-develop\MongoDB\data --logpath E:\Application-develop\MongoDB\log\mongodb2.log --auth
    同前面,文件地址为自己所设置的
    在这里插入图片描述

(4)启动服务 -> 登录测试

  • net start mongodb在这里插入图片描述
    成功后,mongo登录后不会报错在这里插入图片描述

(5)通过超级管理员账号登录

  • 方法1:mongo 127.0.0.1:27017/admin -u 用户名 -p 用户密码
    在这里插入图片描述
  • 方法2:登录 -> use admin -> db.auth('用户名','用户密码')
    在这里插入图片描述

20、备份还原

  • 备份

语法:mongodump -h -prot -u -p -d -o

-h host 服务器IP地址
-port 端口,一般不写,默认27017
-u user 账号
-p pwd 密码
-d database 数据库(数据库不写则导出全部)
-o open 备份数据到指定目录下

【一个小插曲,‘mongodump’ 不是内部或外部命令,也不是可运行的程序或批处理文件,怎么解决】

发现是工具缺失的缘故,对应补充工具下载链接:https://www.mongodb.com/try/download/database-tools
下载完解压后后将对应工具复制到bin目录下即可
在这里插入图片描述
再运行命令即可
备份指定数据库:mongodump -u 用户名 -p 密码 -d 数据库名 -o 存放地址
备份全部:mongodump -u 用户名 -p 密码 -o 存放地址
在这里插入图片描述
在这里插入图片描述

  • 还原

语法:mongorestore -h -port -u -p -d --drop 备份数据目录

还原所有:mongorestore -u 用户名 -p 密码 --drop 备份数据目录
还原指定数据库:mongorestore -u 用户名 -p 密码 -d 数据库名 --drop 备份数据目录\数据库名

-h host 服务器IP地址
-port 端口,一般不写,默认27017
-u user 账号
-p pwd 密码
-d database 数据库(数据库不写则还原全部数据库)
--drop 先删除数据库再导入,不写则覆盖

先删除一个数据库,以操作还原
在这里插入图片描述
执行还原命令在这里插入图片描述
验证
在这里插入图片描述

21、可视化管理工具

Robo 3T 下载:https://robomongo.org/download
在这里插入图片描述
傻瓜式安装,下一步到底,然后运行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即可对数据库进行管理了

22、mongoose

mongoose是node中提供操作MongoDB的模块,能通过node语法实现对MongoDB数据库的增删改查操作,从而实现用node写程序来管理MongoDB数据库

下载命令:npm install mongooseyarn add mongoose

mongoose核心概念:

  • schema 约束字段/列数据
  • model模型 对应集合,后期用它来实现数据的增删改查

中文文档:http://mongoosejs.net/
英文文档:https://mongoosejs.com/

23、mongoose的使用

项目中安装mongoose,npm install mongooseyarn add mongoose

//1、导入模块
const mongoose=require('mongoose');
//2、连接数据库
const db=mongoose.createConnection('mongodb://user:password@localhost:27017/database',{useNewUrlParser:true,useUnifiedTopology:true},err=>{
    if(err){
        console.log('数据库连接失败:',err);
        return;
    }
    console.log('数据库连接成功');
})
//3、设置数据库模型(声明是哪个集合,限制字段个数和字段类型)
const model=db.model('users',{
    username:{type:String},
    password:String,
    age:Number,
    sex:String,
    phone:Number
})
//4、创建实例操作(CURD)
//增删改查,自助查询文档完成
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB使用教程 的相关文章

随机推荐

  • 适用于FreeRTOS初学者,FreeRTOS整体知识框架

    写在前面 xff1a 因为实际使用需求 xff0c 学习了一段时间FreeRTOS 从FreeRTOS的市场占有率来看 xff0c 网上的资料应该很多 xff0c 但是在学习过程中尤其是遇到问题的时候 xff0c 发现真正有用的资料并不多
  • 串口通信float型数据的处理和发送;大端小端;联合体union占用字节大小;结构体的定义

    在介绍float型数据的处理和发送之前 xff0c 先介绍一下大端和小端以及联合体的大小分析 一 什么是大端小端 xff1f 如何测试你的CPU是大端还是小端 xff1f 1 大端小端 xff1a 小端 xff1a 采用小端模式的CPU对操
  • Python中以下划线开头的标识符

    1 以单下划线开头的变量 例如 foo代表禁止外部访问的类成员 xff0c 需通过类提供的接口进行访问 xff0c 不能用 34 from xxx import 34 导入 2 以双下划线开头的变量 例如 foo xff0c 代表类的私有成
  • 【CentOS 7】命令行安装GNOME、KDE图形界面(转载)

    目录 正文 一 进入 root 模式 二 安装 X 窗口系统 三 安装图形界面软件 GNOME 四 更新系统的默认运行级别 正文 CentOS 7 默认是没有图形化界面的 xff0c 但我们很多人在习惯了 Windows 的图形化界面之后
  • Git子模块使用教程

    Git子模块 1 问题背景 随着产品的日益增多 xff0c 各个产品之间的业务功能会出现高度的相同性 xff0c 比如产品A有串口的接收功能 xff0c 产品B也有相同的串口功能 xff0c 这类功能我们可以写成一个通用的串口接收模块 这样
  • K8S Flannel

    1 简介 Flannel 由CoreOS开发 xff0c 用于解决docker集群跨主机通讯的覆盖网络 overlay network xff0c 它的主要思路是 xff1a 预先留出一个网段 xff0c 每个主机使用其中一部分 xff0c
  • 阿里云服务器VNC使用步骤

    1 控制台设置 2 VNC桌面连接设置 yum安装太难 xff0c 不建议 分两步 xff1a 1 安装yum 2 安装VNC ubuntu 16 04中安装yum 在Ubuntu系统中按住 xff1a ctrl 43 alt 43 T 打
  • vscode 配置git

    下载git https git scm com 安装时 xff0c 直接默认所有选项安装 然后打开git安装目录 找到如下路径 打开vscode 点击文件 找到 首选项 点击设置 在搜索框搜索 git path 编辑settings jso
  • Intel D405 运行环境——Realsense-viewer

    第一章 Intel D405 运行环境 Realsense viewer 文章目录 第一章 Intel D405 运行环境 Realsense viewer一 开盲盒二 ubuntu环境下的realsense viewer安装 一 开盲盒
  • linux arm64 中断处理流程完整分析 (一)—— 中断向量表、中断处理流程汇编部分

    中断流程老生常谈 xff0c 但我一直以来也只是知道中断过来之后 xff0c 会保护现场 xff0c 跳到中断向量表 xff0c 执行中断 xff0c 恢复现场 xff0c 然后返回 至于更多细节 xff0c 就不得而知了 这篇文章旨在把更
  • ubuntu apt-get update 失败 server certificate verification failed

    报错提示解决方法step 1step 2step 3 报错提示 执行sudo apt get update时 xff0c 报错如下 Ign 188 https mirrors tuna tsinghua edu cn ubuntu xeni
  • mySQL创建数据库和数据表

    SQL 的主要功能是和数据库建立连接 xff0c 进行增删改查的操作 SQL是关系型数据库管理系统的标准语言 SQL 语言的作用 xff1a 数据定义语言 DDL Data Definition Language 用于创建数据库 xff0c
  • C++刷过的笔试题知识点

    函数若无返回值 xff0c 则它一定无形参 X 析构函数可以有参数 xff0c 但没有返回值 某32位系统下 C 43 43 程序void p 61 malloc 100 sizeof xff08 p xff09 61 4 xff1f 指针
  • 5-字符串

    1 字符串基础 1 1 定义字符串 通过String构造函数构造的字符串与字符串直接量的类型不同 前者为引用对象 xff0c 后者为值类型的字符串 span class token keyword var span s1 span clas
  • 没有Android SDK选项的解决办法+修改Android Studio中的Sdk路径

    安装教程 安装Android Studio时没有Android SDK选项 xff0c 可以先不管 xff0c 继续安装 注意在安装的过程中 xff0c 应该在最后一步install时 xff0c 会出现一个sdk的位置 比如我的在C Us
  • Android Studio一直在Download https://services.gradle.org/distributions/gradle-5.4.1-all.zip的解决方法

    Android Studio的新建工程下面一直出现Download https services gradle org distributions gradle 5 4 1 all zip 解决方法 xff1a 去https service
  • TDEngine 集群安装 (K8S)

    1 构建镜像 1 1 entrypoint sh span class token shebang important bin bash span span class token builtin class name set span 4
  • 设置Android Studio中的模拟器

    怎么设置Android Studio中的模拟器 xff0c 下面记录一下大概流程 然后自己选择设备 xff0c next 下好了之后next 建立后可能会出现以下图片所示问题 位于 的ADB二进制文件已过时 xff0c 并且在Android
  • 算法题算法题!!!!

    0223 思路 xff1a 先计算出老板没控制自己的情绪时的满意数量sum xff0c 再根据X的值 xff0c 维护一个滑动窗口 xff0c 遍历grumpy数组 xff0c 计算增加的满意数量add xff0c 选取最大的一个 xff0
  • MongoDB使用教程

    1 下载 xff1a https www mongodb com try download community 2 安装 解压下载包后正常步骤安装 创建服务 e Application develop MongoDB bin为路径 data