解读MongoDB官方文档获取mongo7.0版本的安装步骤与基本使用
mongo式一款NOSQL数据库,用于存储非结构化数据,mongo是一种用于存储json
的数据数据,可以通过mongo提供的命令解析json获取想要的值。
数据模型
了解关系数据库会很熟悉database,table,row,column
的概念,分别是数据库,表,行,列所组成的二维表,而在mongo中没有存储的是json,在新的数据模型中主要数据模型有db
(数据库),collection
(集合),document
(文档),field
(属性)。
在mongo中一个db
数据库存储多个collection
;一个collection的结构如下:
// collection
{"userId": 1,"id": 1,"title": "delectus aut autem1","completed": false
}
{"userId": 2,"id": 2,"title": "delectus aut autem2","completed": false
}
而每一个结构就是一个document
(文档):
{"userId": 2,"id": 2,"title": "delectus aut autem2","completed": false
}
其中的userId,id
等都是field
(属性)。
安装
- 主机安装
Ubuntu官方安装文档
依次按照官网的命令执行就可以了
左侧可以选安装版本,尽量别选最新的哈,小编在主机上安装时遇到了一些问题导致主机安装未成功。(推荐使用docker 安装)
安装完之后,还需要安装mongo shell用于与mongo server交互,通过命令行的方式操作数据官方下载地址。
mongo shell docs
如果安装没有修改配置文件使用mongosh
会自动连接mongdb://localhost:27017
,如果修改了配置文件或者端口使用mongosh "mongodb://localhost:27017"
编辑端口即可。
mongo会链接一个默认的数据库。
除了使用mongo shell外还可以使用mongo compass
GUI工具,下载地址
mongo compass 内部也集成来mongo sh在左下角
- docker安装
docker pull mongodocker run --name mongo -id -P mongo
使用docker安装看起来要方便很多,安装成功映射到主机端口和mongo shell和mongo compass是一样的。
命令行操作
CURD
通过mongo shell是直接的操作方式,具体的CURD操作如下:
插入
db.collection.insertOne()
db.collection.insertMany()
>除了上述插入方式外还可以借助mongo compass 导入csv等数据。
更新数据
更新有三个参数,分别是过滤器
,更新内容
,条件
db.inventory.updateOne({ item: "paper" },{$set: { "size.uom": "cm", status: "P" },$currentDate: { lastModified: true }}
)
$set
关键字用于更新具体内容,$currentDate
关键字用于把lastModified
字段设置为最近修改时间,没有该字段就创建。
第一个参数是条件,可以使用比较计算符。
删除数据
db.inventory.deleteMany({ status : "A" })
删除也是匹配删除。
db.inventory.deleteOne( { status: "D" } )
删除一个。
比较关键字都可以使用。
命令行查找
db.collection.find()
查询所有
inventory
是collection名,test
是数据库名,_id
是每个collecttion的标识。
精确匹配
find
内部可以使用{ <field1>: <value1>, ... }
表示查询条件。
find会查询所有的
document
找出filed
匹配的项。{}
不使用关键字的情况下就是json数据,该方法就是查询与其一直的数据。
IN查询
db.inventory.find( { status: { $in: [ "A", "D" ] } } )
in
可以使用or
替换
AND查询
条件一起写就是
and
。
比较查询
$lt
是<
模糊查询$regex
$regex
是like。
$regex: '^p'
为前缀查询,^
起前后缀作用。
- 阶级查询
当然比较的关键字还有很多,后续会介绍。这里介绍另一种查询方法.
,field.nestedField
db.inventory.find( { "size.uom": "in" } )# 等价
db.inventory.find( { size: { w: 21, h: 14, uom: "cm" } } ) # 不好写
这种方式使用多级阶层的查询。
匹配列表
Json的valu也是支持数组的,也需要匹配列表查询。
精确匹配
只能拥有查询的列表元素。
子集匹配$all
db.inventory.find( { tags: { $all: ["gel"] } } )
只要拥有查询条件的列表元素即可,即查询条件是数据的子集。
单元素查询
db.inventory.find( { tags: "red" } )
查询条件没有列表只有一个元素,所有包含该元素的的数据都会被查询出来。
列表过滤查询
# dim_nml类型为[ 10, 15.25 ]
# 查找小于25的
db.inventory.find( { dim_cm: { $gt: 25 } } )# db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )# $elemMatch关键字用于多条件查询
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
在列表中也可以使用比较关键字,用于过滤。
列表索引查询
db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
.1
是列表的索引条件,$gt
是比较条件
列表长度查询
db.inventory.find( { "tags": { $size: 3 } } )
$size
关键字表示列表长度,长度为3的将被查询出来。
列表中json元素查询
db.inventory.insertMany( [{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
该数据列表的数据元素也为json。
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
如果列表内部也是json元素,把列表当做一个document处理即可。
指定返回字段查询
直接使用find加条件查询返回所有field。在查询条件后可添加json字段返回指定字段。
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
甚至可以隐藏掉
_id
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
可以看出
1
是显示,0
是隐藏。
也可以反着用,排除返回
db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
多层次结构也要使用.
来构造
db.inventory.find( { status: "A" }, { item: 1, status: 1, "size.uom": 1 } )
存在数组的查询也是如此
shell db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
也可以同时使用比较查询
db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )
空值查询
mongo提供了null
关键字用于空值查询。
db.inventory.insertMany([{ item: null },
])
空值比较查询
db.inventory.find( { item: { $ne : null } } )
有兴趣的话可以了解下$type
和$exists
关键字。
官方方法集合
上述只是介绍了一部分常用的方法,更多一步官方方法集合
包含数据库方法,查询,删除,更新等方法。
相关文章:

解读MongoDB官方文档获取mongo7.0版本的安装步骤与基本使用
mongo式一款NOSQL数据库,用于存储非结构化数据,mongo是一种用于存储json的数据数据,可以通过mongo提供的命令解析json获取想要的值。 数据模型 了解关系数据库会很熟悉database,table,row,column的概念,分别是数据库,…...

【数据结构|C语言版】顺序表
前言1. 初步认识数据结构2. 线性表3. 顺序表3.1 顺序表的概念3.1 顺序表的分类3.2 动态顺序表的实现 结语 前言 各位小伙伴大家好!小编来给大家讲解一下数据结构中顺序表的相关知识。 1. 初步认识数据结构 【概念】数据结构是计算机存储、组织数据的⽅式。 数据…...

Unity类银河恶魔城学习记录12-17 p139 In game UI源代码
Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using UnityEngine;public class UI : MonoBehaviour {[SerializeFie…...

MongoDB学习【一】MongoDB简介和部署
MongoDB简介 MongoDB是一种开源的、面向文档的、分布式的NoSQL数据库系统,由C语言编写而成。它的设计目标是为了适应现代Web应用和大数据处理场景的需求,提供高可用性、横向扩展能力和灵活的数据模型。 主要特点: 文档模型: Mon…...

html 引入vue Element ui 的方式
第一种:使用CDN的方式引入 <!--引入 element-ui 的样式,--> <link rel"stylesheet" href"https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 必须先引入vue, 后使用element-ui --> <…...

曾经备受追捧的海景房,为何如今却没人要了?
独家首发 ------------ 全国多地的海景房如威海乳山、惠州大亚湾、北海银滩等多地的海景房如今大跌也难以卖出,与当初各地对海景房的追捧形成了鲜明对比,为何这些海景房变成如此样子,在于现实与宣传存在着很大的区别。 曾几何时面朝大海鸟语花…...

[docker] 镜像部分补充
[docker] 镜像部分补充 这里补充一下比较少用的,关于镜像的内容 检查镜像 ❯ docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> ca61c1748170 2 hours ago 1.11GB node latest 5212d…...

Android(Kotlin) 委托(by) 封装 SharedPreferences
在 Kotlin 中,委托是一种通过将自身的某个功能交给另一个对象来实现代码重用的技术。通过委托,我们可以将某个属性或方法的实现委托给另一个对象,从而减少重复代码的编写。委托可以用于实现多重继承、代码复用和扩展现有类的功能。 Kotlin 中…...

2022年蓝桥杯省赛软件类C/C++B组----积木画
想借着这一个题回顾一下动态规划问题的基本解法,让解题方法清晰有条理,希望更多的人可以更轻松的理解动态规划! 目录 【题目】 【本题解题思路】 【DP模版】 总体方针: 具体解题时的套路: 【题目】 【本题解题思…...

Python数据挖掘项目开发实战:使用朴素贝叶斯进行社会媒体挖掘
注意:本文下载的资源,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 Python数据挖掘项目开发实战:使用朴素贝叶斯进行社会媒体挖掘 一、项目背景与目标 在社交媒体时代&…...

【DM8】ET SQL性能分析工具
通过统计SQL每个操作符的时间花费,从而定位到有性能问题的操作,指导用户去优化。 开启ET工具 INI参数: ENABLE_MONITOR1 MONITOR_SQL_EXEC1 查看参数 select * FROM v$dm_ini WHERE PARA_NAMEMONITOR_SQL_EXEC;SELECT * FROM v$dm_ini WH…...

001-谷粒商城-微服务剖析
1、架构图 还是很强的,该有的都有 2、微服务模块 SpringCloudAlibaba组件包括 SentinelNacosRocketMQSeata 搭配SpringCloudAlibaba组件 OpenFeignGateWayRibbn gateway使用了SpringWebFlux,前几天研究到,为什么springboot不直接使用Spri…...

vue实现前端打印效果
如图效果所示(以下演示代码) <template><div><el-button v-print"printObj" type"primary" plain click"handle">{{ text }}</el-button><div style"display: none"><div id…...

android wifi直连 wifip2pmanager
android wifi直连 wifip2pmanager;使用WiFi 直连,然后通过udp进行通讯。 Android WiFi 直连(Wi-Fi Direct,也称为Wi-Fi P2P)是一种让两台或多台设备通过Wi-Fi技术直接进行点对点连接的技术,无需借助传统的无…...

伸缩应用程序和执行滚动更新
📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看 📙Jav…...

解决WPS右键菜单冗余选项,去除WPS右键菜单选项
问题描述 安装WPS后,右键菜单会多出许多无用的选项,如何去除? 解决方法 按下WindowsS打开搜索栏,搜索配置工具打开 勾选所有的关闭和隐藏选项...

部署ELFK+zookeeper+kafka架构
目录 前言 一、环境部署 二、部署ELFK 1、ELFK ElasticSearch 集群部署 1.1 配置本地hosts文件 1.2 安装 elasticsearch-rpm 包并加载系统服务 1.3 修改 elasticsearch 主配置文件 1.4 创建数据存放路径并授权 1.5 启动elasticsearch是否成功开启 1.6 查看节点信息 …...

ActiveMQ 任意文件上传漏洞复现
一、使用弱口令登陆 访问 http://ip:8161/admin/ 进入admin登陆页面,使用弱口令登陆,账号密码皆为 admin,登陆成功后,headers中会出现验证信息 如: Authorization: Basic YWRtaW46YWRtaW4 # 二、利用PUT协议上…...

k8s实践总结
一、pod常用操作: 1、如何重启pod? 1.1 删除并重新创建Pod 这是最直接的方法。你可以通过kubectl命令行工具删除Pod,然后Kubernetes将基于其对应的Deployment、ReplicaSet或其他控制器自动重新创建它。 不建议并行删除全部pod,…...

前端从零到一搭建脚手架并发布到npm
这里写自定义目录标题 为什么需要脚手架?前置-第三方工具的使用1. 创建demo并运行-4步新建文件夹 zyfcli,并初始化npm init -y配置入口文件 2.commander-命令行指令3. chalk-命令行美化工具4. inquirer-命令行交互工具5. figlet-艺术字6. ora-loading工具…...

使用 git 提交项目到 github
文章推荐:https://zhuanlan.zhihu.com/p/193140870 连接失败:https://zhuanlan.zhihu.com/p/521340971 分支出错:https://blog.csdn.net/gongdamrgao/article/details/115032436...

SRE 与传统 IT 运营有何不同?
软件开发和部署方法的发展要求组织管理和维护 IT 基础设施的方式发生转变。站点可靠性工程(SRE) 是一门将软件工程的各个方面融入 IT 运营的学科,处于这一变革的前沿。随着专业人士和组织都寻求适应,对 SRE 认证和培训计划的需求激增。本博客探讨了 SRE …...

html公众号页面实现点击按钮跳转到导航
实现效果: 点击导航自动跳转到: html页面代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>跳转导航</title><meta name"keywords" conten…...

【算法】快速排序的基本思想、优化 | 挖坑填补法和区间分割法
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 更多算法分析与设计知识专栏:算法分析🔥 给大家跳…...

OSPF动态路由实验(华为)
思科设备参考:OSPF动态路由实验(思科) 一,技术简介 OSPF(Open Shortest Path First)是一种内部网关协议,主要用于在单一自治系统内决策路由。它是一种基于链路状态的路由协议,通过…...

EasyRecovery2024专业免费的电脑数据恢复软件
EasyRecovery数据恢复软件是一款功能强大的数据恢复工具,广泛应用于各种数据丢失场景,帮助用户从不同类型的存储介质中恢复丢失或删除的文件。 该软件支持恢复的数据类型非常广泛,包括但不限于办公文档、图片、音频、视频、电子邮件以及各种…...

Vue集成PageOffice实现在线编辑word、excel(前端配置)
一、什么是PageOffice PageOffice是一款在线的office编辑软件,帮助Web应用系统或Web网站实现用户在线编辑Word、Excel、PowerPoint文档。可以完美实现在线公文流转,领导批阅,盖章。可以给文件添加水印,在线安全预览防止用户下载…...

IBM SPSS Statistics for Mac:数据分析的卓越工具
IBM SPSS Statistics for Mac是一款功能强大的数据分析软件,专为Mac用户设计,提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生,都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…...

python爬虫------- Selenium下篇(二十三天)
🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…...

获取字符串的全排列(去除字符串中2个字符相同时造成的重复)
一、概念 现有一个字符串,要打印出该字符串中字符的全排列。 以字符串abc为例,输出的结果为:abc、acb、bac、bca、cab、cba。 以字符串aab为例,输出的结果为:aab、aba、baa。 二、代码 public class Permutation {pub…...