当前位置: 首页 > news >正文

MongoDB数据库操作及操作命令

目录

一、基础概念

二、安装mongod

 三、命令交互数据库

(1)数据库命令

(2)集合命令

(3)文档命令

 四、Mongoose

(1)增加一条数据

(2)插入多个数据 

(3)删除一条数据

(4)删除多个数据

(5)更新数据

(6)更新多条数据

(7)读取条件某一条数据

(8)根据id读取某一条数据

(9)读取多个数据

(10)根据查询条件读取

(11)个性化读取

(12)开发常见的操作

五、图形化管理


一、基础概念

Mongodb 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/
数据库的主要作用就是用来管理数据,能够达到增删改查的作用,语法也和JavaScript相似。
在使用数据库之前要了解三个概念
(1)数据库:是一个数据仓库,例如一个数据库下有很多个集合(也可以理解成多个表)
(2)集合:表,在JavaScript的提现形式 可以理解为 数组 [ { id:2 ,name:ultraman } ]
(3)文档:就可以理解成一条数据了 在JavaScript的提现形式 可以理解为 { id:2 ,name:ultraman }
用js代码举个例子:
{"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

下载地址: https://www.mongodb.com/try/download/community
建议选择 zip 类型, 通用性更强
配置步骤如下:
  1. 将压缩包移动到 C:\Program Files 下,然后解压
  2. 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
  3. mongodb bin 目录作为工作目录,启动命令行
  4. 运行命令 mongod

由于每次都需要在 bin目录下才能运行mongod,我们可以通过环境变量的形式进行配置

  1. 复制一下 目录名称 例如 :C:\Program Files\mongodb-win32-x86_64-windows-5.0.19\bin
  2. 打开编辑变量 找到path 把路径进行追加就好了 
  3. 下次可以在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

Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/
//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
}
unique 需要 重建集合 才能有效果

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

五、图形化管理

Robo 3T 免费 https://github.com/Studio3T/robomongo/releases
Navicat 收费(可以去某站安装破解版教程)  https://www.navicat.com.cn/

 

相关文章:

MongoDB数据库操作及操作命令

目录 一、基础概念 二、安装mongod 三、命令交互数据库 &#xff08;1&#xff09;数据库命令 &#xff08;2&#xff09;集合命令 &#xff08;3&#xff09;文档命令 四、Mongoose &#xff08;1&#xff09;增加一条数据 &#xff08;2&#xff09;插入多个数据 &am…...

Linux命令(62)之tee

linux命令之tee 1.tee介绍 linux命令tee于读取标准输入的数据&#xff0c;并将内容输出为文件 2.tee用法 tee [参数] [filename] tee参数 参数说明-a读取标准输入的数据&#xff0c;并将内容追加到文件&#xff0c;而非覆盖-i忽略中断信号 3.实例 3.1.将ls -l输出内容作为…...

搭建Repo服务器

1 安装repo 参考&#xff1a;清华大学开源软件镜像站:Git Repo 镜像使用帮助 2 创建manifest仓库 2.1 创建仓库 git init --bare manifest.git2.2 创建default.xml文件 default.xml文件内容&#xff1a; <?xml version"1.0" encoding"UTF-8" ?…...

安卓:MMKV——键值存储库

目录 一、MMKV介绍 1.特点和优势&#xff1a; 2.使用指南&#xff1a; 3.依赖包&#xff1a; 二、MMKV的常用方法 1、初始化和获取实例&#xff1a; 2、存储数据&#xff1a; 3、读取数据 4、删除数据 5、其他操作&#xff1a; 三、MMKV的使用例子 MainActivity&#xff…...

使用Python将图像转换为PDF:一次性解决您的批量转换需求

导语&#xff1a; 在数字化时代&#xff0c;我们经常需要处理大量的图像文件。将这些图像转换为PDF格式可以方便地存档、分享和打印。本文将介绍如何使用Python编程语言将图像批量转换为PDF&#xff0c;并提供了一个简单易用的图形界面来跟踪转换进度。 准备工作 在开始之前…...

Vue——webpack

webpack 一、Install1.全局安装2.局部安装 二、总结1.打包2.定义脚本3.配置文件定义&#xff08;webpack.config.js)4.项目重新加载依赖5.webpack打包Css6.style-loader 一、Install 1.全局安装 npm install webpack webpack-cli -g2.局部安装 以项目为单位&#xff0c;一个项…...

springboot房地产管理java购房租房二手房j客户sp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 springboot房地产管理 系统1权限&#xff1a;管理员 …...

Gartner 发布影响数据科学和机器学习未来方向重要趋势

出品 | CSDN 云计算 供稿 | Gartner Gartner今日发布了影响数据科学与机器学习&#xff08;DSML&#xff09;未来方向的重要趋势。随着DSML行业的快速发展和演变&#xff0c;数据对于人工智能&#xff08;AI&#xff09;开发与运用的重要性日益提高&#xff0c;尤其是投资重点…...

72. 编辑距离

题目介绍 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 "horse", word2 &q…...

Android12.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局

1.前言 在12.0的系统rom定制化开发中,对于系统原生systemui的锁屏界面的功能也是非常重要的,所以在锁屏页面布局中,也是有通知栏布局的,所以接下来对于息屏亮屏 通知栏布局的相关流程分析,看下亮屏后锁屏页面做了哪些功能 2.原生系统SystemUI下拉状态栏和通知栏视图之锁…...

周末在家值班,解决几个月前遗忘的Bug

问题&#xff1a; 周末被迫在家值班&#xff0c;无聊之际打开尘封已久的Bug清单&#xff0c;发现有Bug拖了几个月还没解决… 场景是这样子的&#xff0c;有个功能是拿Redis缓存热点数据进行展示&#xff0c;暂且称它为功能A&#xff0c;有个另外的功能B&#xff0c;它会去更新缓…...

Shell编程基础(十五)文本三剑客(sed)

文本三剑客&#xff08;sed&#xff09; 使用场景基本语法实例命令列表 使用场景 sed提供了一种面交互的方式修改文件内容。 它是一行一行处理&#xff0c;可以通过正则匹配要修改的部分 基本语法 基本语法 sed [-opt] command files(多个文件 空格隔开) sed 使用正则 sed -…...

5,二叉树【p6-p7】

二叉树 5.1二叉树5.1.1例1&#xff1a;用递归和非递归两种方式实现二叉树的先序、中序、后序遍历5.1.1.1递归序的先序、中序、后序遍历先序遍历&#xff1a;中序遍历&#xff1a;后序遍历&#xff1a; 5.1.1.2非递归序的先序、中序、后序遍历先序遍历&#xff1a;中序遍历&…...

【Spring】如果你需要使用重试机制,请使用Spring官方的Spring Retry

文章目录 前言Spring Retry的基本使用第一步&#xff0c;引入Spring Retry的jar包第二步&#xff0c;构建一个RetryTemplate类第三步&#xff0c;使用RETRY_TEMPLATE注意事项 拓展方法降级操作重试策略&#xff1a;时间策略重试策略&#xff1a;指定异常策略 前言 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系统中&#xff0c;我们经常需要查询文件夹中包含多少文件。本文将介绍三种在Linux中查询文件夹中文件数量的方法&#xff0c;帮助你轻松获取所需信息。 二、方法 1、使用ls命令和wc命令 使用ls命令的-l选项和管道操作符|结合wc命令来统计文件数量&#xf…...

PS透明屏,在科技展示中,有哪些优点展示?

PS透明屏是一种新型的显示技术&#xff0c;它将传统的显示屏幕与透明材料相结合&#xff0c;使得屏幕能够同时显示图像和透过屏幕看到背后的物体。 这种技术在商业展示、广告宣传、产品展示等领域有着广泛的应用前景。 PS透明屏的工作原理是利用透明材料的特性&#xff0c;通…...

Hbase-面试题

1. Hbase-region切分 自动切分&#xff0c;默认情况下 2.0版本&#xff0c;第一次region的数据达到256M&#xff0c;会进行切分&#xff0c;以后就是每达到10G切分一次&#xff0c;切分完成后&#xff0c;会进行负载均衡&#xff0c;均衡到其他regionserver预分区自定义rowke…...

图的宽度优先深度优先遍历

图常见的遍历方式有两种&#xff0c;一种是宽度优先遍历&#xff0c;一种是深度优先遍历。 宽度优先遍历 宽度优先遍历和之前介绍的二叉树的层级遍历类似&#xff0c;主要也是利用Queue来完成层级的遍历&#xff0c;除此之外&#xff0c;因为图中很可能有环&#xff0c;所以还…...

redis Set类型命令

Redis中的Set是一种无序、不重复的集合数据结构&#xff0c;它提供了一系列的操作命令用于对Set进行添加、删除和查找等操作。以下是Redis中Set类型常见的一些命令&#xff1a; SADD key member [member …]&#xff1a;将一个或多个成员添加到指定的集合中。 示例&#xff1a;…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …...