MongoDB数据库操作及操作命令
目录
一、基础概念
二、安装mongod
三、命令交互数据库
(1)数据库命令
(2)集合命令
(3)文档命令
四、Mongoose
(1)增加一条数据
(2)插入多个数据
(3)删除一条数据
(4)删除多个数据
(5)更新数据
(6)更新多条数据
(7)读取条件某一条数据
(8)根据id读取某一条数据
(9)读取多个数据
(10)根据查询条件读取
(11)个性化读取
(12)开发常见的操作
五、图形化管理
一、基础概念
(1)数据库:是一个数据仓库,例如一个数据库下有很多个集合(也可以理解成多个表)(2)集合:表,在JavaScript的提现形式 可以理解为 数组 [ { id:2 ,name:ultraman } ](3)文档:就可以理解成一条数据了 在JavaScript的提现形式 可以理解为 { id:2 ,name:ultraman }
{"users": [{"id": 1,"name": "张三","age": 18,},{"id": 2,"name": "李四","age": 20,},],"articles": [{"id": 1,"title": "标题1","content": "内容1",},{"id": 2,"title": "标题2","content": "内容2",},],} 在代码中 整个对象就是一个数据库(JSON文件) 里面包含着两个集合(表) 一个用户表和一个文章表 文档就可以理解成某条表中的数据。
当然也可以有多个数据库,一般情况下一个项目使用一个数据库
二、安装mongod
- 将压缩包移动到 C:\Program Files 下,然后解压
- 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
- 以 mongodb 中 bin 目录作为工作目录,启动命令行
- 运行命令 mongod

由于每次都需要在 bin目录下才能运行mongod,我们可以通过环境变量的形式进行配置
- 复制一下 目录名称 例如 :C:\Program Files\mongodb-win32-x86_64-windows-5.0.19\bin
- 打开编辑变量 找到path 把路径进行追加就好了

- 下次可以在cmd命令窗口测试
三、命令交互数据库
命令交互也就是通过cmd命令行的形式进行交互
(1)数据库命令
show dbs use 数据库名 显示当前所在的数据库
db 删除当前数据库
use 库名
db.dropDatabase() (2)集合命令
db.createCollection('集合名称') 显示当前数据库中的所有集合
show collections db.集合名.drop() db.集合名.renameCollection('newName') (3)文档命令
db.集合名.insert(文档对象); 查询文档 _id 是 mongodb 自动生成的唯一编号,用来唯一标识文档
db.集合名.find(查询条件) 更新文档
db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}}) 删除文档
db.集合名.remove(查询条件) 四、Mongoose
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require("mongoose");
//3. 连接数据库
mongoose.connect("mongodb://127.0.0.1:27017/bilibili");
//4. 设置连接回调
//连接成功
mongoose.connection.on("open", () => {console.log("连接成功");//5. 创建文档结构对象let BookSchema = new mongoose.Schema({title: String,author: String,price: Number,});//6. 创建文档模型对象let BookModel = mongoose.model("book", BookSchema);//7. 插入文档BookModel.create({title: "西游记",author: "吴承恩",price: 19.9,},(err, data) => {if (err) throw err;//输出 data 对象console.log(data);//8. 断开连接mongoose.disconnect();});
});
//连接出错
mongoose.connection.on("error", () => {console.log("连接出错~~");
});
//连接关闭
mongoose.connection.on("close", () => {console.log("连接关闭");
});
字段类型
title: String,price: Number,isHot: Boolean,category: Array,Date: Date,Buffer: Buffer,Mixed : mongoose.Schema.Types.Mixed, // 接收所有类型ObjectId: mongoose.Schema.Types.ObjectId, // 主键 对象ID 用来查询其他表Decimal: mongoose.Schema.Types.Decimal128, // 高精度类型 有些键也可以写出对象的形式,进行字段验证
(1)必填项
title: {type: String,required: true // 设置必填项
}
(2)默认值
author: {type: String,default: '匿名' //默认值
} (3)枚举值
gender: {type: String,enum: ['男','女'] //设置的值必须是数组中的
} (4)唯一值
username: {type: String,unique: true
} (1)增加一条数据
mongoose.connection.on("open", () => {console.log("连接成功");let BookSchema = new mongoose.Schema({title: String,author: String,price: Number});let BookModel = mongoose.model('book', BookSchema);BookModel.create({title: "《水浒传》",price: 15,}).then((res) => {console.log(res);console.log("保存成功!");})}); 接下来以 模型.操作 为代码
(2)插入多个数据
BookModel.insertMany([{title: "《水浒传》",price: 15,isHot: true},{title: "《西游记》",price: 20,isHot: true}]).then((res) => {console.log(res);console.log("保存成功!");}) (3)删除一条数据
BookModel.deleteOne({ _id: "64c604fb363d6aa46652f368" }).then((res) => { console.log(res);console.log("删除成功!");}) (4)删除多个数据
isHot为false的全部删除
BookModel.deleteMany({ isHot: false }).then((res) => {console.log(res);console.log("删除多个成功!");}) (5)更新数据
参数1:条件 ,参数2 更新内容
BookModel.updateOne({ _id: "64c604fb363d6aa46652f362" },{price:99}).then((res) => { console.log(res);console.log("更新成功!");}) (6)更新多条数据
BookModel.updateMany({ isHot: true, },{isHot:false}).then((res) => {console.log(res);console.log("更新多个成功!");}) (7)读取条件某一条数据
BookModel.findOne({ _id: "64c604fb363d6aa46652f362" }).then((res) => { console.log("读取成功!",res);}) (8)根据id读取某一条数据
BookModel.findById("64c604fb363d6aa46652f362").then((res) => { console.log("读取成功!",res);}) (9)读取多个数据
BookModel.find({ isHot: false, }).then((res) => {console.log("读取多个成功!",res);}) (10)根据查询条件读取
一些条件不能用> < = 这些来使用判断 ,要有相对于的命令符号
- > 使用 $gt
- < 使用 $lt
- >= 使用 $gte
- <= 使用 $lte
- !== 使用 $ne
下面举例一些 运算的判断
// 1.多个条件的查询 价格大于20 并且 isHot 为 falseBookModel.find({ price: { $gt: 20 }, isHot: false }).then((res) => {console.log("价格大于20的", res);})// 2.多个条件的查询都要满足 价格大于20 或者 isHot 为 falseBookModel.find({ $and: [{ price: { $gt: 20 } }, { isHot: false }] }).then((res) => {console.log("价格大于20的", res); })// 3.多个条件的查询满足一个 价格大于20 或者 isHot 为 falseBookModel.find({ $or: [{ price: { $gt: 20 } }, { isHot: true }] }).then((res) => {console.log("价格大于20的", res);})// 4. 查询价格在 20 - 30 之间的数据BookModel.find({ price: { $gte: 20, $lte: 30 } }).then((res) => {console.log("价格大于20的", res);})// 5.正则查询BookModel.find({ title: { $regex: /三国/ } }).then((res) => {console.log("查询包含三国的", res);}) (11)个性化读取
查找后也可以通过链式调用进行后续的操作,也是进行了Promise的封装
// 1.只读取出数据的某些字段BookModel.find().select({title:1,price:1,_id:0}).then((res) => {console.log("筛选结果", res);})// 2.排序 1 升序 -1 降序BookModel.find().select({title:1,price:1,_id:0}).sort({price:1}).then((res) => {console.log("筛选结果", res);})// 3.数据截取BookModel.find().select({title:1,price:1,_id:0}).limit(2).then((res) => {console.log("筛选结果", res);})// 4.截取3-4条BookModel.find().select({title:1,price:1,_id:0}).skip(2).limit(2).then((res) => {console.log("筛选结果", res);}) (12)开发常见的操作
// 登录login: async ({ username, password }) => {return UserModel.find({ username, password });},// 更新个人用户信息updateUserInfo: async (info) => {// 如果没有上传头像,就删除avatar字段 就不更新了if (info.image == "") delete info.image;return UserModel.updateOne({ _id: info.id }, info).then((res) => {return UserModel.findOne({ _id: info.id });}).catch((err) => {console.log("修改失败了", err);});},// 获取用户列表getUserList: async ({ pageSize = 10, pageNum = 1, keyword = "" }) => {return {code: 200,msg: "获取成功",data: {pageNum: pageNum,pageSize: pageSize,total: await UserModel.find({username: { $regex: keyword },}).countDocuments(),userList: await UserModel.find({ username: { $regex: keyword } }).select("-password").skip((pageNum - 1) * pageSize).limit(pageSize),},};},// 添加用户addUser: async (info) => {return UserModel.find({ username: info.username }).then((res) => {console.log("res", res);if (res.length) {return { code: 500, msg: "用户名已存在" };} else {UserModel.create(info);return { code: 200, msg: "添加成功", data: { userInfo: info } };}});},// 删除用户deleteUser: async (info) => {return UserModel.deleteOne({ _id: info.id }).then((res) => {console.log(res, "res");if (res.deletedCount) {return { code: 200, msg: "删除成功" };} else {return { code: 500, msg: "删除失败" };}});},// 更新用户信息updateUser: async (info) => {if (info.password == "") delete info.password;return UserModel.updateOne({ _id: info._id }, info).then((res) => {console.log(res, "res");if (res.modifiedCount) {return { code: 200, msg: "更新成功" };} else {return { code: 500, msg: "更新失败" };}}).catch((err) => {console.log(err);});}
五、图形化管理

相关文章:
MongoDB数据库操作及操作命令
目录 一、基础概念 二、安装mongod 三、命令交互数据库 (1)数据库命令 (2)集合命令 (3)文档命令 四、Mongoose (1)增加一条数据 (2)插入多个数据 &am…...
Linux命令(62)之tee
linux命令之tee 1.tee介绍 linux命令tee于读取标准输入的数据,并将内容输出为文件 2.tee用法 tee [参数] [filename] tee参数 参数说明-a读取标准输入的数据,并将内容追加到文件,而非覆盖-i忽略中断信号 3.实例 3.1.将ls -l输出内容作为…...
搭建Repo服务器
1 安装repo 参考:清华大学开源软件镜像站:Git Repo 镜像使用帮助 2 创建manifest仓库 2.1 创建仓库 git init --bare manifest.git2.2 创建default.xml文件 default.xml文件内容: <?xml version"1.0" encoding"UTF-8" ?…...
安卓:MMKV——键值存储库
目录 一、MMKV介绍 1.特点和优势: 2.使用指南: 3.依赖包: 二、MMKV的常用方法 1、初始化和获取实例: 2、存储数据: 3、读取数据 4、删除数据 5、其他操作: 三、MMKV的使用例子 MainActivityÿ…...
使用Python将图像转换为PDF:一次性解决您的批量转换需求
导语: 在数字化时代,我们经常需要处理大量的图像文件。将这些图像转换为PDF格式可以方便地存档、分享和打印。本文将介绍如何使用Python编程语言将图像批量转换为PDF,并提供了一个简单易用的图形界面来跟踪转换进度。 准备工作 在开始之前…...
Vue——webpack
webpack 一、Install1.全局安装2.局部安装 二、总结1.打包2.定义脚本3.配置文件定义(webpack.config.js)4.项目重新加载依赖5.webpack打包Css6.style-loader 一、Install 1.全局安装 npm install webpack webpack-cli -g2.局部安装 以项目为单位,一个项…...
springboot房地产管理java购房租房二手房j客户sp源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 springboot房地产管理 系统1权限:管理员 …...
Gartner 发布影响数据科学和机器学习未来方向重要趋势
出品 | CSDN 云计算 供稿 | Gartner Gartner今日发布了影响数据科学与机器学习(DSML)未来方向的重要趋势。随着DSML行业的快速发展和演变,数据对于人工智能(AI)开发与运用的重要性日益提高,尤其是投资重点…...
72. 编辑距离
题目介绍 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 "horse", word2 &q…...
Android12.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局
1.前言 在12.0的系统rom定制化开发中,对于系统原生systemui的锁屏界面的功能也是非常重要的,所以在锁屏页面布局中,也是有通知栏布局的,所以接下来对于息屏亮屏 通知栏布局的相关流程分析,看下亮屏后锁屏页面做了哪些功能 2.原生系统SystemUI下拉状态栏和通知栏视图之锁…...
周末在家值班,解决几个月前遗忘的Bug
问题: 周末被迫在家值班,无聊之际打开尘封已久的Bug清单,发现有Bug拖了几个月还没解决… 场景是这样子的,有个功能是拿Redis缓存热点数据进行展示,暂且称它为功能A,有个另外的功能B,它会去更新缓…...
Shell编程基础(十五)文本三剑客(sed)
文本三剑客(sed) 使用场景基本语法实例命令列表 使用场景 sed提供了一种面交互的方式修改文件内容。 它是一行一行处理,可以通过正则匹配要修改的部分 基本语法 基本语法 sed [-opt] command files(多个文件 空格隔开) sed 使用正则 sed -…...
5,二叉树【p6-p7】
二叉树 5.1二叉树5.1.1例1:用递归和非递归两种方式实现二叉树的先序、中序、后序遍历5.1.1.1递归序的先序、中序、后序遍历先序遍历:中序遍历:后序遍历: 5.1.1.2非递归序的先序、中序、后序遍历先序遍历:中序遍历&…...
【Spring】如果你需要使用重试机制,请使用Spring官方的Spring Retry
文章目录 前言Spring Retry的基本使用第一步,引入Spring Retry的jar包第二步,构建一个RetryTemplate类第三步,使用RETRY_TEMPLATE注意事项 拓展方法降级操作重试策略:时间策略重试策略:指定异常策略 前言 Spring Retr…...
pagehelper 优化自定义分页和排序位置
pagehelper开源地址 https://github.com/pagehelper/Mybatis-PageHelper 1.手写Count查询优化 源码分页count时首先是判断是否存在手写的 {业务查询id}_COUNT 的查询count统计 private Long count(Executor executor, MappedStatement ms, Object parameter,RowBounds rowBound…...
Linux下查询文件夹中文件数量的方法
一、前言 在Linux系统中,我们经常需要查询文件夹中包含多少文件。本文将介绍三种在Linux中查询文件夹中文件数量的方法,帮助你轻松获取所需信息。 二、方法 1、使用ls命令和wc命令 使用ls命令的-l选项和管道操作符|结合wc命令来统计文件数量…...
PS透明屏,在科技展示中,有哪些优点展示?
PS透明屏是一种新型的显示技术,它将传统的显示屏幕与透明材料相结合,使得屏幕能够同时显示图像和透过屏幕看到背后的物体。 这种技术在商业展示、广告宣传、产品展示等领域有着广泛的应用前景。 PS透明屏的工作原理是利用透明材料的特性,通…...
Hbase-面试题
1. Hbase-region切分 自动切分,默认情况下 2.0版本,第一次region的数据达到256M,会进行切分,以后就是每达到10G切分一次,切分完成后,会进行负载均衡,均衡到其他regionserver预分区自定义rowke…...
图的宽度优先深度优先遍历
图常见的遍历方式有两种,一种是宽度优先遍历,一种是深度优先遍历。 宽度优先遍历 宽度优先遍历和之前介绍的二叉树的层级遍历类似,主要也是利用Queue来完成层级的遍历,除此之外,因为图中很可能有环,所以还…...
redis Set类型命令
Redis中的Set是一种无序、不重复的集合数据结构,它提供了一系列的操作命令用于对Set进行添加、删除和查找等操作。以下是Redis中Set类型常见的一些命令: SADD key member [member …]:将一个或多个成员添加到指定的集合中。 示例:…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
