一文搞懂MongoDB

简介

什么是MongoDB

MongoDB是一个基于分布式文件存储的NoSQL数据库,基于C++语言开发而成的。它以文档存储格式(BSON)为基础,是由字段和值对组成的数据结构。

扩展:

BSON(Binary JSON)是一种二进制表示的JSON格式。它与JSON类似,是一种文本的数据交换格式。相比JSON,BSON具有以下优势:

  • 二进制表示的JSON格式,使存储相同数据时,BSON需要的字节数更少,利于大规模数据的存储和传输;

  • 支持更多数据类型;

  • 支持嵌套文档和数组的表示,可更灵活地组织和表示复杂的数据结构。

MongoDB的逻辑结构

  • 数据库(database):一个仓库,里面存放集合。

  • 集合(collection):类似于数组,在集合中可以存放文档。

  • 文档(document):文档数据库中的最小单位,存储和操作的内容都是文档。

Mongo数据类型

基本操作

在MongoDB中,数据库和集合不需要手动创建。当创建文档时,如果文档所在的集合或数据库不存在,数据库会自动创建!

基本指令

(1)查看当前所有数据库列表:show dbs/databases

(2)进入到指定的数据库: use 数据库名

注意:MySQL需先创建数据库才能使用,而MongoDB可直接使用use命令来指定一个并不存在的数据库。

(3)查询当前所处的数据库:db 

(4)显示我们数据库中所有的集合:show collections 

(5) 清屏:cls

CRUD操作

插入操作

(1)插入一个文档到集合中:db.collection.insertOne({field:value})

(2)插入多个文档到集合中:db.collection.insertMany([{field:value}])

(3)插入一个或多个文档到集合中:db.collection.insert()

注意:

  • 向集合中插入文档时,没有给文档指定_id属性,则数据库会自动给文档添加_id,_id属性用来作为文档的唯一标识;

  • _id属性可自己指定,但必须确保唯一性,如果人为指定则数据库就不会再添加了。

(4)批量添加两万条数据的性能高,尽量少调用系统的方法

var arr=[]; 
for(var i=1;i<=20000;i++){ arr.push({num:i}); 
}
db.test.insert(arr);

查询操作

(1)查询集合中的数据:db.collection.find()  

注意:查询后的结果默认按照_id的值进行升序排列

(2)限制查询返回结果的数量:limit(Integer id)

(3)排序查询结果:sort({field: [1|-1] })

    文档对象参数需用一个属性来指定排序规则;排序规则1表示升序,-1表示降序

(4)跳过指定数量的数据:skip(Integer id)    

扩展:

(1)分页功能实现一般使用skip函数和limit函数。

skip( (页码-1)*每页显示的条数 ).limit(每页显示的条数) 

(2)MongoDB中skip、limit、sort无论怎么组合使用,执行顺序都是sort>skip>limit;

(5)条件查询:find({field: value})

    查询满足条件的一条数据:findOne({field: value}) 

(6)指定查询条件和返回字段:find(field: value}, {field: [0|1])

    第二个参数用于设置查询结果的投影,属性对应的值1表示返回字段,0表示不返回字段如果没指定属性_id不返回,则数据库会自动返回_id。

投影结果指定排除某些字段:比如返回sex字段以外的所有字段

扩展:

find方法的第二个参数对多个属性进行操作:

两处报错说明:

(1)MongoServerError:Cannot do exclusion on field sex in inclusion projection(属性sex不能在包含的投影中做排斥)

(2)MongoServerError: Cannot do inclusion on field sex in exclusion projection(属性sex不能在排除的投影中做包容)

(7)比较两个数:$gt大于,$lt小于,$eq等于,$gte大于等于,$lte小于等于。

(8)查询某个字段的值是否在数组中:$in在,$nin不在

(9)判断某个字段是否存在:$exists  

$exists对应的值0或false表示不存在,1或true表示存在。

 

$exists只用于查询某个字段是否存在,不能用于查询某个字段值是否存在

(10)复杂查询:and、or、not

    1)逻辑与:$and: [{field: value}, {field: value}] 

        与逻辑与结果一致更简便的写法如下:

    2)逻辑或:$or: [{field: value}, {field: value}]

    3)逻辑非:$not: {field: value}

(11)正则表达式:$regex: /表达式/

(12)忽略大小写:$options: “i”

(13)统计文档数量:db.collection.countDocuments()

(14)统计查询数据的数量:db.collection.find().count()

(15)查询表中属性去重后的数据:db.collection.distinct(field)

更新操作

(1)更新数据:

  • 更新满足条件的一条数据:updateOne({field: value}, {field: value}) 

  • 更新满足条件的多条数据:updateMany({field: value}, {field: value})

  • 更新满足条件的一条或多条数据:updateMany({field: value}, {field: value})

注意:第一个参数用于找要更新的对象;第二参数表示要更新的文档对象的值。如果更新的字段不存在,则数据库会自动创建这个字段。

(2)用来修改文档中的指定属性:$set: {field: value}

​(3)用来删除文档的指定属性:$unset: {field: value}

(4)用于向数组中添加一个新的元素:$push(可重复添加)

(5)向数组中添加一个新元素:$addToSet(不可重复添加)

(6)替换一个符合条件的文档对象:db.collection.replaceOne({field:value}, {field:value})

第一个参数是查询条件用于找要替换的对象;第二参数表示替换后的对象。

扩展:

  • MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是文档时,我们称这个文档为内嵌文档

  • MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过 . 的形式来匹配,且属性名必须使用引号(双引号单引号都行)。比如:db.users.find("hobby.movies":"hero")。

删除操作

(1)删除数据 

删除满足条件的一条数据:deleteOne({field:value})

删除满足条件的多条数据:db.collection.deleteMany({field:value}) 

(2)删除数据库的集合:db.collection.drop()  

如果最后一个集合没了,数据库也就没了!

(3)删除当前所在数据库 :db.dropDatabase() 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣日记1.11-【二叉树篇】450. 删除二叉搜索树中的节点

力扣日记&#xff1a;【二叉树篇】450. 删除二叉搜索树中的节点 日期&#xff1a;2024.1.11 参考&#xff1a;代码随想录、力扣 450. 删除二叉搜索树中的节点 题目描述 难度&#xff1a;中等 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key…

区间预测 | Matlab实现CNN-BiLSTM-KDE的卷积双向长短期神经网络结合核密度估计多变量时序区间预测

区间预测 | Matlab实现CNN-BiLSTM-KDE的卷积双向长短期神经网络结合核密度估计多变量时序区间预测 目录 区间预测 | Matlab实现CNN-BiLSTM-KDE的卷积双向长短期神经网络结合核密度估计多变量时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CNN-BiLSTM-KDE多…

【python】python新年烟花代码【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 新年的钟声即将敲响&#xff0c;为了庆祝这个喜庆的时刻&#xff0c;我们可以用 Python 编写一个炫彩夺目的烟花盛典。本文将详细介绍如何使用 Pygame 库创建一个令人惊叹的烟花效果。 一、效果图&#xff1a; 二…

安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现

安防视频监控EasyCVR系统具备较强的兼容性&#xff0c;它可以支持国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…

R语言下载安装及VScode配置

文章目录 1. R 下载和安装1.1 下载1.2 安装 2. VSCODE 配置2.1 安装R拓展2.2 安装R语言辅助功能包2.3 DEBUG 1. R 下载和安装 1.1 下载 网址&#xff1a;https://www.r-project.org/ 选择一个镜像地址下载 选择对应的版本 一般选择base即可 1.2 安装 下载安装包后按提示安装…

jupyter notebook 配置conda 虚拟环境python

conda创建python环境 conda create -n openvoice python3.9 激活环境 source activate openvoice 在虚拟环境中安装ipykernel pip install ipykernel 添加虚拟环境进到 jupyter notebook python -m ipykernel install --user --name openvoice --display-name openvoice …

Springboot+vue的毕业论文管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的毕业论文管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的毕业论文管理系统&#xff0c;采用M&#xff08;model&…

QT延时五种实现方法

QT中没有提供专用延时函数&#xff0c;但有多种实现方法&#xff0c;各有特点&#xff0c;如下所示&#xff1a; 一.阻塞方式 1.多线程程序使用QThread::sleep()或者QThread::msleep()或QThread::usleep()或QThread::wait()进行延时处理。 Sleep不会释放对象锁&#xff0c;其…

第3章:python的判断语句

学一门语言&#xff0c;无外乎多敲&#xff0c;多用&#xff0c;记得回顾昨天写过的代码呀 布尔类型和比较运算符 布尔类型的定义 使用比较运算符进行比较运算得到布尔类型的结果 比较运算符 """ 演示布尔类型的定义 以及比较运算符的应用 ​ """…

并发前置知识一:线程基础

一、通用的线程生命周期&#xff1a;“五态模型” 二、java线程有哪几种状态&#xff1f; New&#xff1a;创建完线程Runable&#xff1a;start(),这里的Runnable包含操作的系统的Running&#xff08;运行状态&#xff09;和Ready&#xff08;上面的可运行状态&#xff09;Blo…

vscode配置Todo Tree插件

一、在VSCode中安装插件Todo Tree ​​​​ 二、按下快捷键ctrlshiftP&#xff0c;输入setting.jspn 选择相应的配置范围&#xff0c;我们选择的是用户配置 Open User Settings(JSON)&#xff0c;将以下代码插入其中。 {//todo-tree 标签配置从这里开始 标签兼容大小写字母(…

强化学习9——免模型预测算法介绍(蒙特卡洛方法和时步差分方法)

对于大部分情况来说&#xff0c;环境是未知的&#xff0c;也就是说状态转移概率未知&#xff0c;对于这种情况的算法称为免模型预测算法。免模型算法与环境不断交互学习&#xff0c;但是需要大量的运算。 蒙特卡洛方法 蒙特卡罗方法通过重复随机抽选&#xff0c;之后运用统计…

Python-基础语法

标识符 第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Python 3 中&#xff0c;可以用中文作为变量名&#xff0c;非 ASCII 标识符也是允许的了。 python保留字 保留字即关键字&#xff0c;我们不能把它们用…

MATLAB全局最优搜索函数:GlobalSearch函数

摘要&#xff1a;本文介绍了 GlobalSearch 函数的使用句式&#xff08;一&#xff09;、三个运行案例&#xff08;二&#xff09;、 GlobalSearch 函数的参数设置&#xff08;三&#xff09;、GlobalSearch 注意事项及必要说明&#xff08;五&#xff09;等内容。详细介绍如下&…

FineBI实战项目一(18):每小时上架商品个数分析开发

点击新建组件&#xff0c;创建每小时上架商品个数组件。 选择线图&#xff0c;拖拽cnt&#xff08;总数&#xff09;到纵轴&#xff0c;拖拽hourStr到横轴。 修改横轴和纵轴的文字。 调节连线样式。 添加组件到仪表板。

攒机到底能省多少钱?

昨天弄好了攒机配置&#xff0c;今天要求配置一些更为实用的配置&#xff0c;只是作为一般办公&#xff0c;单位买进来的计算机都是联想&#xff0c;价格普遍在7000元以上&#xff0c;出于省钱和实用目的&#xff0c;今天搭配了一个组机方案。 上面的配置对付一般办公足够&…

基于JAVA的婚恋交友网站 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

2 快速前端开发

CSS快速入门 1.CSS案例1.1 内容回顾1.2 案例&#xff1a;二级菜单1.2.1 划分区域1.2.2 搭建骨架1.2.3 Logo区域1.2.4 菜单部分 1.3 案例&#xff1a;顶部菜单 二级菜单小结 1.4 案例&#xff1a;推荐区域1.4.1 划分区域1.4.2 搭建骨架1.4.3 案例的实现小结 2. CSS知识点2.1 ho…

登录模块的实现

一.前期的准备工作 1.页面的布局 (1)表单的校验: 利用element-ui提供的文档绑定rules规则后实现校验 (2)跨域的配置 &#xff1a; 利用proxy代理来解决跨域的问题 (3)axios拦截器的配置 两个点:1. 在请求拦截的成功回调中,如果token,因为调用其它的接口需要token才能调取。 在请…

2024.1.11 Kafka 消息队列,shell命令,核心原理

目录 一 . 消息队列 二. Kafka 三 . 启动命令 四 . Kafka的Shell 命令 五 . Kafka的核心原理 1. Topic的分区和副本机制 2 . 消息存储机制 和 查询机制 3. Kafka中生产者数据分发策略 六 . Kafka 之所以具有高速的读写性能&#xff0c;主要有以下几个原因 七. 笔记…