解读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(属性)。

安装

  1. 主机安装

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在左下角
在这里插入图片描述

  1. docker安装
docker pull mongo

docker 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关键字。

官方方法集合

上述只是介绍了一部分常用的方法,更多一步官方方法集合

包含数据库方法,查询,删除,更新等方法。

在这里插入图片描述

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

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

相关文章

【SpringBoot】返回参数

返回参数 返回页面返回数据返回 html 代码返回 json 数据两数相加用户登录 返回页面 首先在 static 文件夹中创建 index.html 文件&#xff1a; 代码&#xff1a; <html> <body><h1>hello word!!!</h1><p>this is a html page</p> <…

聚类能代替分类吗?

聚类和分类是两种不同的机器学习方法&#xff0c;它们在处理数据时有着不同的目的和应用场景。 分类&#xff1a;分类是一种监督学习方法&#xff0c;它需要已标记的训练数据集。在分类中&#xff0c;算法会学习如何将输入数据映射到预定义的类别中。例如&#xff0c;给定一组包…

如何判断超级充电测试负载是否合格?

超级充电测试负载是电动汽车充电设备的重要组成部分&#xff0c;其性能直接影响到电动汽车的充电效率和安全性。因此&#xff0c;判断超级充电测试负载是否合格是非常重要的。以下是一些判断标准&#xff1a; 超级充电测试负载的充电效率是衡量其性能的重要指标&#xff0c;合格…

leetcode代码记录(Z 字形变换

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a;…

验证ElasticSearch 分词的BUG

验证ElasticSearch 分词的BUG 环境介绍 ElasticSearch 版本号: 6.7.0 BUG 重现 创建测试案例索引 PUT test_2022 {"settings": {"analysis": {"filter": {"pinyin_filter": {"type": "pinyin"}},"analy…

kafka(六)——存储策略

存储机制 kafka通过topic作为主题缓存数据&#xff0c;一个topic主题可以包括多个partition&#xff0c;每个partition是一个有序的队列&#xff0c;同一个topic的不同partiton可以分配在不同的broker&#xff08;kafka服务器&#xff09;。 关系图 partition分布图 名称为t…

互联网元搜索引擎SearXNG

最近有个很火的项目叫 FreeAskInternet&#xff0c;其工作原理是&#xff1a; 第一步、用户提出问题第二步、用 SearXNG&#xff08;本地运行&#xff09;在多个搜索引擎上进行搜索第三步、将搜索结果传入 LLM 生成答案 所有进程都在本地运行&#xff0c;适用于需要快速获取信…

【深度学习】AI修图——DragGAN原理解析

1、前言 上一篇&#xff0c;我们讲述了StyleGAN2。这一篇&#xff0c;我们就来讲一个把StyleGAN2作为基底架构的DragGAN。DragGAN的作用主要是对图片进行编辑&#xff0c;说厉害点&#xff0c;可能和AI修图差不多。这篇论文比较新&#xff0c;发表自2023年 原论文&#xff1a…

vscode中调试C++程序,解读debug步骤

下面对几个调试的按键进行解释&#xff1a; 按钮1&#xff1a;运行/继续 F5&#xff0c;真正的一步一步运行。当有断点的时候&#xff0c;只会执行断点所在行语句和开头结尾两行语句。 按钮2&#xff1a;单步跳过(又叫逐过程) F10&#xff0c;按语句单步执行。当有函数时&#…

制作适用于openstack平台的win10镜像

1. 安装准备 从MSDN下载windows 10的镜像虚拟机开启CPU虚拟化的功能。从Fedora 网站下载已签名的 VirtIO 驱动程序 ISO 。 创建15 GB 的 qcow2 镜像&#xff1a;qemu-img create -f qcow2 win10.qcow2 15G 安装必要的软件 yum install qemu-kvm qemu-img virt-manager libvir…

【Docker系列】容器访问宿主机的Mysql

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Mac M1(ARM) 使用Vmware Fusion从零搭建k8s集群

该笔记仅用于自己学习&#xff1b;上一篇安装了环境&#xff0c;这一篇开始 Mac M1(ARM) 使用Vmware Fusion从零搭建k8s集群【参考】 VMware Fusion下修改vmnet8网络和添加vmnet网络 【注意如下】 虚拟机ip修改的位置修改的&#xff0c;记得开启宿主机的mac os 网络共享&#…

有依赖的的动态规划问题

题目 题型分析 这是比较典型的动态规划的问题。动态规划是什么呢&#xff1f;本质上动态规划是对递归的优化。例如&#xff0c;兔子数列&#xff1a;f(x) f(x - 1) f(x -2), 我们知道 f 代表了计算公式&#xff0c;这里解放思想一下&#xff0c;如果 f 替换为数组&#xff0…

vue实现前端打印效果

如图效果所示&#xff08;以下演示代码&#xff09; <template><div><el-button v-print"printObj" type"primary" plain click"handle">{{ text }}</el-button><div style"display: none"><div id…

基于Springboot+Vue的Java项目-在线视频教育平台系统(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

鸿蒙OS开发指导:【应用包签名工具】

编译构建 该工具基于Maven3编译构建&#xff0c;请确认环境已安装配置Maven3环境&#xff0c;并且版本正确 mvn -version下载代码&#xff0c;命令行打开文件目录至developtools_hapsigner/hapsigntool&#xff0c;执行命令进行编译打包 mvn package编译后得到二进制文件&…

[开发日志系列]PDF图书在线系统20240415

20240414 Step1: 创建基础vueelment项目框架[耗时: 1h25min(8:45-10:10)] 检查node > 升级至最新 (考虑到时间问题,没有使用npm命令行执行,而是觉得删除重新下载最新版本) > > 配置vue3框架 ​ 取名:Online PDF Book System 遇到的报错: 第一报错: npm ERR! …

halcon 3.2标定相机

参考《solution_guide_iii_c_3d_vision.pdf》 3.2.2.2 Which Distortion Model to Use 选用何种畸变模型 对于面阵相机&#xff0c;halcon中两种畸变模型&#xff1a;The division model and the polynomial model&#xff08;差分模型和多项式模型&#xff09;&#xff0c;前…

使用 Scrapy 爬取豆瓣电影 Top250

一、Scrapy框架 1. 介绍 在当今数字化的时代&#xff0c;数据是一种宝贵的资源&#xff0c;而网络爬虫&#xff08;Web Scraping&#xff09;则是获取网络数据的重要工具之一。而在 Python 生态系统中&#xff0c;Scrapy 框架作为一种高效、灵活的网络爬虫框架&#xff0c;为…

MLOps

参考&#xff1a; 什么是MLOps&#xff1f;与DevOps有何异同&#xff1f;有什么价值&#xff1f;https://baijiahao.baidu.com/s?id1765071998288593530&wfrspider&forpcMLOps简介_AI开发平台ModelArts_WorkflowMLOps(Machine Learning Operation)是机器学习&#xf…