惬意上手MongDB

上一篇文章介绍了MySQL,今天来介绍一下MongoDB,相较于MySQL而言,它是简单的。

简介

MongoDB是一种开源的、跨平台的文档数据库,采用NoSQL数据库的形式。它以高性能、高可用性和灵活的数据模型而闻名,适用于大规模数据存储和处理。MongoDB使用BSON(Binary JSON)格式存储数据,支持复制、故障转移、自动分片等功能,被广泛应用于Web应用程序、大数据分析等领域。

简单说,它是一种非关系型数据库(NoSQL),采用json格式的数据进行存储。

它通常不需要像MySQL那样操作前还需要进行登录,但也可以创建具有不同权限的用户。

安装

安装过程比较简单,这里我直接放一个官方安装教程,需要的同志可以跳转。

官方安装教程icon-default.png?t=N7T8https://docs.mongoing.com/install-mongodbmongoDB的可视化工具一般是使用 robo,图标长这样:。自己点一下放大。

操作

 老生长谈了,数据库操作无非四个字“增删改查”,英文就是CRUD(create, read, update, delete),如果你能说出来CRUD,那会高级一点。

 DB操作 

同样的操作,win+r,type into cmd, enter。 

然后输入mongo,再来一个回车,好的,就会出现下面的界面: 

 这里肯定是有人会报错的, 因为是需要配置环境变量的,不配置,不行。

配置环境变量

先找到你的mongo的安装位置, 找到bin文件夹,点进去然后复制路径,我的是:D:\Program Files\MongoDB\Server\4.0\bin,然后按着下面的操作

最后你点击了新建,粘贴你的路径就行了,就可以在终端进行操作了。 

db操作

mongDB每行代码可以不加分号。 

 此句就是展示你现有的数据库,且只显示非空数据库。

show dbs

然后是选择数据库,没有这个数据库就会自动创建,创建后会自动切换到此数据库,是不是比MySQL方便多了:

# 选择名为student的数据库
use student

 删除数据库(删除之前先切换到此数据库,所以不用写db的名字):

drop.database()

collection操作

collection就是集合,他就像MySQL中的一个表。

创建名字为info的集合:

db.createCollection('info')

 其实你不需要创建集合,使用的时候自动会创建。

删除info集合:

db.info.drop()

 

数据操作

先介绍一下mongoDB的文件结构,看图:

 

我点开了一个我创建的4399数据库,Collections就是创建的集合,集合game里面是很多的文档,每个文档就像mysql中的一行,而且每个文档之间是独立的,意思就是它存储的数据不像MySQL那样受列的限制,每个文档内部是这样的:

 

里面的数据就是json格式,你发现“_id”了吗,这个id是自动创建的,是用于标识的,不用管。 

 查询

 可以采用find()方法,返回与查询条件匹配的所有文档:

// 查找所有文档
db.collection.find();

// 查找特定文档
db.collection.find({ name: "John Doe" });

还有一个findOne(),它只能返回一条查询数据。 

插入

要插入一条新文档,可以使用 insertOne()insertMany() 方法。

  • insertOne():插入单个文档。
  • insertMany():插入多个文档。
// 插入单个文档
db.collection.insertOne({ name: "John Doe", age: 30 });

// 插入多个文档
db.collection.insertMany([
  { name: "Jane Doe", age: 25 },
  { name: "Peter Parker", age: 20 }
]);

插入一条一个{}就行,插入多个 用[]包括{},一个{}代表一条。

删除

要删除文档,可以使用 deleteOne()deleteMany() 方法。

  • deleteOne():删除与查询条件匹配的第一条文档。
  • deleteMany():删除与查询条件匹配的所有文档。
// 删除单个文档
db.collection.deleteOne({ name: "John Doe" });

// 删除多个文档
db.collection.deleteMany({ age: { $gt: 30 } });

$gt的意思就是gteater than(大于),下面还会介绍。 

删除多个文档是删除与条件相匹配的文档 。

修改

要更新文档,可以使用 updateOne()updateMany() 方法。

  • updateOne():更新与查询条件匹配的第一条文档。
  • updateMany():更新与查询条件匹配的所有文档。
// 更新单个文档
db.collection.updateOne({ name: "John Doe" }, { $set: { age: 31 } });

// 更新多个文档
db.collection.updateMany({ age: { $gt: 25 } }, { $inc: { age: 1 } });

 update这个函数需要注意,第一个{}代表条件,第二个{}代表更新值,$set什么意思?如果不加这个,那么文档的所有的原有值将会被替换成更新值,加了就是替换对应的值。

第二句$inc 是 MongoDB 中的更新操作符,用于将数字字段增加指定的值。

 

查询条件

比较运算符
$eqequal 等于

$ne

not equal 不等于
$gtgreater than 大于
$ltless than 小于
$gtegreater than equal 大于等于
$lteless than equal 小于等于

加上英语是不是变得很简单了,就是取了首字母,还有一点想必你也注意到了,就是使用这些符号需要加上$. 

逻辑运算

MongoDB 中的逻辑运算符用于将多个查询条件组合在一起。

逻辑运算符:

  • $and: 所有条件都必须为真
  • $or: 至少一个条件必须为真
  • $not: 条件必须为假
// 查找年龄大于 30 且名称等于 "John Doe" 的文档
db.collection.find({ $and: [{ age: { $gt: 30 } }, { name: "John Doe" }] });

// 查找年龄大于 30 或名称等于 "Jane Doe" 的文档
db.collection.find({ $or: [{ age: { $gt: 30 } }, { name: "Jane Doe" }] });

// 查找名称不等于 "John Doe" 的文档
db.collection.find({ $not: { name: "John Doe" } });

其实这个$and是不必要的,因为你find()的时候是可以加多个条件的,就等于是and。 但是要放在一个{}里:{"key":value, "key":value}

成员运算

应该就一个,$in 

// 查询了stu集合里age等于10或20的文档

db.stu.find({'age':{$in:[10,20]}}) 

正则

 惊喜不惊喜,意外不意外,mongo中竟然可以用正则,反正我今天学的时候是挺意外的,因为正则很强,爬虫中必不可少吧。正则是啥?那你需要动手查查了。

查找包含特定字符序列的文档:

db.collection.find({ name: { $regex: /John/ } });

此查询将查找名称字段中包含字符串 "John" 的所有文档。

查找以特定字符序列开头的文档:

db.collection.find({ name: { $regex: /^John/ } });

此查询将查找名称字段以字符串 "John" 开头的所有文档。

查找以特定字符序列结尾的文档:

db.collection.find({ name: { $regex: /John$/ } });

此查询将查找名称字段以字符串 "John" 结尾的所有文档。

查找包含特定模式的文档:

db.collection.find({ name: { $regex: /J.* Doe/ } });

此查询将查找名称字段与模式 "J.* Doe" 匹配的所有文档,其中 ".*" 表示任意数量的任何字符。

查找不包含特定字符序列的文档:

db.collection.find({ name: { $not: { $regex: /John/ } } });

此查询将查找名称字段中不包含字符串 "John" 的所有文档。

注意:

  • 正则表达式必须使用 / 字符界定
  • 正则表达式可以使用各种修饰符,例如 i(不区分大小写)和 m(多行)。
  • 正则表达式查询通常比其他类型的查询慢,因此应谨慎使用。
自定义

 其实用到的是运算符 $where 

举个栗子吧,查询数据库中stu集合中age大于20的文档:

db.stu.find($where:function(){return this.age > 20})

this就代表的是当前的集合,是不是又java那味了。 

常用技术

 排序

排序用到是sort() 函数,必须和find()一起使用。

按名称字段升序对文档进行排序:

db.collection.find().sort({ name: 1 });

按年龄字段降序对文档进行排序:

db.collection.find().sort({ age: -1 });

按多个字段排序:

db.collection.find().sort({ name: 1, age: -1 });

里面的1就代表升序,-1代表降序。 

计数

 使用到了count(),返回集合中符合条件的文档的个数。

db.stu.count({'age':{$gt:20}})

 上面的代码的意思就是返回集合stu中age大于20的文档的个数。

下图是对我创建按的集合hello的操作,自己看看吧:

分页

 分页,就是limit()skip()

跳过前 10 条文档并返回接下来的 20 条文档:

 db.collection.find().skip(10).limit(20);

我觉得无需多言,一看便知。 

投影

特性:

  • 允许指定要返回的字段
  • 可以使用投影操作来减少返回的数据量,从而提高查询性能。

注意点:

  • 投影操作不适用于聚合管道。
  • 投影后的结果集可能不是稳定的,这意味着在多次执行相同的查询时,结果的顺序可能不同。

示例:

仅返回 nameage 字段:

db.collection.find({}, { projection: { name: 1, age: 1 } });

排除 _id 字段:

db.collection.find({}, { projection: { _id: 0 } });

 第一个{}前面说过了,代表条件,可以为空,但不能没有。后边的加一个projection,通俗点说,1代表显示,0不显示。

 

aggregate(聚合)

MySQL有聚合函数,mongo有聚合框架,其实都大差不差啦,只是写法叫法不同罢了。

MongoDB 聚合框架是一个强大的工具,用于对数据进行复杂的数据转换和聚合。它允许您将多个操作管道化在一起,以执行各种数据处理任务。

语法:

db.collection.aggregate([ { $stage1: { $operation1: ... } }, { $stage2: { $operation2: ... } }, ... ]);

其中:

  • $stage1 和 $stage2 是聚合管道阶段。
  • $operation1 和 $operation2 是聚合操作。

聚合操作:

聚合框架提供了各种聚合操作,包括:

  • $group: 对文档进行分组并计算聚合值(例如求和、平均值、最大值和最小值)。
  • $project: 指定要返回的字段并转换文档的结构。
  • $match: 过滤文档以仅包括满足特定条件的文档。
  • $sort: 按一个或多个字段对文档进行排序。
  • $limit: 限制返回的文档数。
  • $skip: 跳过指定数量的文档。

示例:

计算每个类别的总销售额:

db.collection.aggregate([ { $group: { _id: "$category", totalSales: { $sum: "$price" } } } ]);

按名称对文档进行分组并计算每个组的平均年龄:

db.collection.aggregate([ { $group: { _id: "$name", avgAge: { $avg: "$age" } } } ]);

注意:上面这两句price、age字段前面加了$。 

过滤出年龄大于 30 岁的文档并按名称排序:

db.collection.aggregate([ { $match: { age: { $gt: 30 } } }, { $sort: { name: 1 } } ]);

聚合框架非常灵活,可以用于执行各种复杂的数据处理任务。它对于分析大数据集和提取有意义的见解非常有用。

 

总之,掌握一些mongo的基础操作是不难的,对于仅仅是使用的人是够的,况且现在有C老师(chatGPT)。 

 

ok,本文结束🌹🌹🌹,我是努力的yao,不定时分享知识给大家,如果觉得我写的可以,可以关注一下。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/457186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

html--钢琴

代码 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>html钢琴</title> <script src"js/js.js"></script> <link href"…

QT开发(二) 构建QMainWindow

1、前言 QMainWindow是Qt框架中用于创建应用程序主窗口的类。它是许多GUI应用程序的基础&#xff0c;提供了丰富的功能和灵活性&#xff0c;以支持用户界面的创建和管理。 QMainWindow的结构主要包括以下几个部分&#xff1a; 菜单栏&#xff08;Menu Bar&#xff09;&#…

【单调栈】代码随想录算法训练营第六十天 |84.柱状图中最大的矩形(待补充)

84.柱状图中最大的矩形 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱…

RC4算法:流密码算法的经典之作

title: RC4算法&#xff1a;流密码算法的经典之作 date: 2024/3/11 18:16:16 updated: 2024/3/11 18:16:16 tags: RC4起源演变算法优劣分析RC4 vs AES安全性RC4 vs DES性能比较应用场景介绍工作原理详解代码实例演示 一、RC4算法的起源与演变 RC4算法是由著名密码学家Ron Riv…

粒子群算法对pi控制器进行参数优化,随时优化pi参数以控制直流无刷电机转速。

粒子群算法对pi控制器进行参数优化&#xff0c;随时优化pi参数以取得设定直流无刷电机转速。 PSO优化PID&#xff0c;用于BLDC速度控制 仿真平台为&#xff1a;MATLAB 采用的是Simulinkm程序相配合 仿真结果以及程序示例&#xff1a;

UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)

一.颜色叠加混合 1.Blend混合 // 正常&#xff0c;透明度混合 Normal Blend SrcAlpha OneMinusSrcAlpha //柔和叠加 Soft Additive Blend OneMinusDstColor One //正片叠底 相乘 Multiply Blend DstColor Zero //两倍叠加 相加 2x Multiply Blend DstColor SrcColor //变暗…

一款前端开发工具Hbuilder

背景&#xff1a;最近日在接触前同事留下的一个VUE项目&#xff08;只有前端代码&#xff0c;后台服务压根没写真不知道以前是怎么糊弄过去的&#xff09;时&#xff0c;发现一款可以快速开发前端的软件&#xff1b;今日分享一下。 当我打开项目时发现&#xff0c;有个app.vue…

C语言——详解字符函数和字符串函数(一)

Hi,铁子们好呀&#xff01;今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下&#xff1a; 文章目录 &#x1f386;1.字符分类函数&#x1f4af;&#x1f4af;⏩1.1 什么是字符分类函数的&#xff1f;&#x1f4af;&#x1f4af;⏩1.2 字符函数的类型有哪…

回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测

回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测 目录 回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GSWOA-KELM多变量回归预测…

ffmpeg解码和渲染理解

ffmpeg解码和渲染理解 ffmpeg视频解码步骤 FFmpeg 是一个功能强大的跨平台多媒体处理工具&#xff0c;包含了音视频编解码、封装/解封装、过滤器等功能。下面是一般情况下使用 FFmpeg 进行视频解码的步骤&#xff1a; 初始化 FFmpeg 库&#xff1a;首先需要初始化 FFmpeg 库&a…

linux系统达梦数据库(安装及操作)

新建 dmdba 用户 注意: 安装前必须创建 dmdba 用户&#xff0c;禁止使用 root 用户安装数据库。 创建用户所在的组&#xff0c;命令如下&#xff1a; groupadd dinstall 创建用户&#xff0c;命令如下&#xff1a; useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba 修…

一文彻底搞懂OSI七层模型和TCP/IP四层模型

文章目录 1. OSI七层模型2. TCP/IP四层模型 1. OSI七层模型 OSI&#xff08;Open System Interconnect&#xff09;七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能&#xff0c;从物理连接到应用程序的处理。这种模型有助于不同的…

口才提升秘籍:马云的说话之道你也能学会!

口才提升秘籍&#xff1a;马云的说话之道你也能学会&#xff01; 在商界&#xff0c;马云以其卓越的领导才能和出色的口才赢得了广泛的赞誉。他的每一次演讲都充满智慧和力量&#xff0c;不仅激发了员工的斗志&#xff0c;也赢得了合作伙伴的信任。那么&#xff0c;马云是如何…

ctf杂项总结

1.文件无法打开 1.1.文件拓展名损坏/错误导致 方法&#xff1a; 1.使用kali当中的file命令查看&#xff0c;之后修改为正确的后缀即可 2.通过16进制编辑器打开查看文件头 3.文件头残缺/错误&#xff0c;可以先使用kail当中的file命令查看它的类型&#xff0c;之后再通过 16…

基于springboot实现驾校信息管理系统项目【项目源码+论文说明】

基于springboot实现驾校信息管理系统演示 摘要 随着人们生活水平的不断提高&#xff0c;出行方式多样化&#xff0c;也以私家车为主&#xff0c;那么既然私家车的需求不断增长&#xff0c;那么基于驾校的考核管理也就不断增强&#xff0c;那么业务系统也就慢慢的随之加大。信息…

运维自动化之ansible工具

目录 前言 一、Ansible 工具概述 1、Ansible 功能 2、Ansible 特性 3、Ansible 优缺点 4、Ansible 架构 4.1 Ansible 组成 4.2 Ansible 命令执行来源 二、Ansible 安装和基础用法 1、Ansible 安装 1.1 yum源安装 1.2 使用python编译安装 1.3 Git方式安装 2、Ansib…

2.MongoDB与关系数据库对比

MongoDB的简单操作与比较 与关系数据库对比 MySQL与MongoDB都是开源的常用数据库&#xff0c;但是MySQL是传统的关系型数据库&#xff0c;MongoDB则是非关系型数据库&#xff0c;也叫文档型数据库&#xff0c;是一种NoSQL的数据库。它们各有各的优点&#xff0c;来看看他们之…

天地图全国幼儿园数据下载与处理分析

概述 在看天地图服务资源的时候看到有个“幼儿园”的数据&#xff0c;好奇点开看了下&#xff0c;下载下来数据差看了下&#xff0c;数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。 数据下载 通过地址https://service.tianditu.gov.cn/…

Flutter 多语言、主题切换之GetX库

多语言、主题切换之GetX库 前言正文一、配置项目二、模拟UI三、语言配置① 常量键② 语言配置文件③ 配置 四、持久化五、切换语言① my_home.dart② home.dart③ mine_controller.dart④ language_setting_controller.dart⑤ language_setting.dart⑥ mine.dart 六、切换主题①…

流水账-20240314

目录 Linux系统删除文件后&#xff0c;磁盘大小没变化mysql事务和neo4j事务冲突误诊描述解决方法网上提供的方法重置Neo4j密码&#xff0c;成功解决问题高版本低版本 Linux系统删除文件后&#xff0c;磁盘大小没变化 lsof L1|grep 删除的文件名kill进程 mysql事务和neo4j事务…