解读MongoDB官方文档获取mongo7.0版本的安装步骤与基本使用

news2024/12/26 12:05:28

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

官方方法集合

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

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

在这里插入图片描述

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

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

相关文章

leetcode代码记录(Z 字形变换

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

开源模型应用落地-chatglm3-6b-gradio-入门篇(七)

一、前言 早前的文章&#xff0c;我们都是通过输入命令的方式来使用Chatglm3-6b模型。现在&#xff0c;我们可以通过使用gradio&#xff0c;通过一个界面与模型进行交互。这样做可以减少重复加载模型和修改代码的麻烦&#xff0c; 让我们更方便地体验模型的效果。 二、术语 2.…

使用 Fetch API 执行 GraphQL 查询和变体

GraphQL 简介 GraphQL 是从远程服务器查询数据的强大工具&#xff0c;也是我构建 API 的首选方式。对一些人来说&#xff0c;学习它可能有一定难度&#xff0c;因为教程通常使用 Apollo 或 Relay 等工具进行编写。 这些工具很不错&#xff0c;但通常更适用于复杂项目。在某些…

Python基于Django的微博热搜、微博舆论可视化系统

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

【TEE论文】IceClave: A Trusted Execution Environment for In-Storage Computing

摘要 使用现代固态硬盘&#xff08;SSD&#xff09;的存储中计算使开发人员能够将程序从主机转移到SSD上。这被证明是缓解I/O瓶颈的有效方法。为了促进存储中计算&#xff0c;已经提出了许多框架。然而&#xff0c;其中很少有框架将存储中的安全性作为首要任务。具体而言&…

WPS二次开发系列:WPS SDk功能就概览

作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 作者通过深度测试使用了WPS SDK提供的Demo&#xff0…

比特币突然暴跌

作者&#xff1a;秦晋 周末愉快。 今天给大家分享两则比特币新闻&#xff0c;也是两个数据。一则是因为中东地缘政治升温&#xff0c;传统资本市场的风险情绪蔓延至加密市场&#xff0c;引发加密市场暴跌。比特币跌至66000美元下方。杠杆清算金额高达8.5亿美元。 二则是&#x…

代码随想录Day41:动态规划Part3

Leetcode 343. 整数拆分 讲解前&#xff1a; 毫无头绪 讲解后&#xff1a; 这道题的动态思路一开始很不容易想出来&#xff0c;虽然dp数组的定义如果知道是动态规划的话估摸着可以想出来那就是很straight forward dp定义&#xff1a;一维数组dp[i], i 代表整数的值&#xf…

蓝桥杯 — — 纯质数

纯质数 题目&#xff1a; 思路&#xff1a; 一个最简单的思路就是枚举出所有的质数&#xff0c;然后再判断这个质数是否是一个纯质数。 枚举出所有的质数&#xff1a; 可以使用常规的暴力求解法&#xff0c;其时间复杂度为&#xff08; O ( N N ) O(N\sqrt{N}) O(NN ​)&…

(十)C++自制植物大战僵尸游戏设置功能实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 游戏设置 游戏设置功能是一个允许玩家根据个人喜好和设备性能来调整游戏各项参数的重要工具。游戏设置功能是为了让玩家能够根据自己的需求和设备性能来调整游戏&#xff0c;以获得最佳的游戏体验。不同的游戏和平…

相机系列——透视投影:针孔相机模型

作者&#xff1a;木一 引言 上文我们提到&#xff0c;三维相机是对真实世界成像的模拟&#xff0c;为了让三维物体在计算机屏幕上呈现出来的图像符合人眼观察效果&#xff0c;通常采用透视投影方式模拟相机成像&#xff0c;为了简化计算&#xff0c;可以用针孔相机模型来描述…

设计模式——观察者模式17

观察者模式指多个对象间存在一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式。 中介者模式是N对N的双向关系。观察者模式是1对N的单向关系。 设计模式&#xff0c;一定要敲代码…

STC89C52学习笔记(十三)

STC89C52学习笔记&#xff08;十三&#xff09; 综述&#xff1a;本文讲述了红外调控的原理和通信以及外部中断相关知识。 一、红外调控 1、定义 红外遥控是利用红光进行通信的设备。 2、特点 ①由红LED将调制后的信号发出&#xff0c;由专门的红外接收头进行解调输出。 …

​​​​网络编程探索系列之——广播原理剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之广播原理剖析&#xff0c;在这篇文章中&#xff0c; 你将会学习到如何在网络编程中利用广播来与局域网内加入某个特定广播组的主机&#xff01; 希望这篇文章能对你有所帮助&#xff0c;大家要是觉得我写…

jupyter使用虚拟环境里的依赖配置

进入虚拟环境fourier-features-pytorchconda activate fourier-features-pytorch 安装ipykernel pip install ipykernel -i https://pypi.tuna.tsinghua.edu.cn/simple将核与虚拟环境匹配 python -m ipykernel install --user --namefourier-features-pytorch打开jupyter j…

Kafka 架构深入介绍 及搭建Filebeat+Kafka+ELK

目录 一 架构深入介绍 &#xff08;一&#xff09;Kafka 工作流程及文件存储机制 &#xff08;二&#xff09;数据可靠性保证 &#xff08;三&#xff09;数据一致性问题 &#xff08;四&#xff09;故障问题 &#xff08;五&#xff09;ack 应答机制 二 实…

【max材质addtive叠加模式特效渲染不出通道的解决办法】

max材质addtive叠加模式特效渲染不出通道的解决办法 2021-12-22 18:15 max的scanline扫描线&#xff0c;vray渲染可以&#xff0c;红移不行(只支持它自己的材质&#xff0c;它自己的材质没有additive模式)。据说mr是可以的。 右侧的球体使用附加不透明度。 附加不透明度通过将…

关于机器学习/深度学习的一些事-答知乎问(六)

如何使用频率域变换对序列数据进行增强&#xff1f; 时频变换是常见的信号分析思路&#xff0c;同样可用于数据增强。在频率域添加噪声是方法之一。比如可以对传感器信号应用短时傅里叶变换STFT得到具有时序关系的谱特征&#xff0c;再在谱特征上应用两种数据增强方法。一是对…

Amazon MemoryDB for Redis的探索和实践

一、背景 由于当下项目的日益增长的数据量&#xff0c;单机Redis已经远远不能满足我们的要求。考虑转成集群&#xff0c;但是直接在服务器中搭建Redis集群的话&#xff0c;EC2挂掉则Redis也会随之挂掉&#xff0c;耦合性太强。所以将Redis相关的服务全部抽取在单独的服务器上或…

论文笔记:Time Travel in LLMs: Tracing Data Contamination in Large Language Models

iclr 2024 spotlight reviewer评分 688 1 intro 论文认为许多下游任务&#xff08;例如&#xff0c;总结、自然语言推理、文本分类&#xff09;上观察到的LLMs印象深刻的表现可能因数据污染而被夸大 所谓数据污染&#xff0c;即这些下游任务的测试数据出现在LLMs的预训练数据…