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

官方方法集合

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

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

在这里插入图片描述

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

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

相关文章

C语言 | 自定义类型:struct结构体(详解)

目录&#xff1a; --前言 1. 结构体类型的定义与基础结构 2. 结构体的使用 3. typedef相关 4. 结构体的自引用 5. 结构体内存对齐 6. 结构体传参 7. 结构体实现位段 --前言&#xff1a; c语言中内置类型&#xff0c;也有自定义的类型。 例如&#xff1a;内置类型 in…

代码随想录算法训练营第四十一天| LeetCode 343. 整数拆分、96.不同的二叉搜索树

一、LeetCode 343. 整数拆分 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html 状态&#xff1a;已解决 1.思路 题目的要求是要我们拆除某个给定的整数&#xff0c;让其拆分后的数相乘结果最大。因此我们知…

笔记84:关于递归法的一些感悟

题目1&#xff1a;二叉树的前序遍历 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(…

18.软件定时器

一、简介 软件定时器是指具有定时功能的软件&#xff0c;FreeRTOS 提供的软件定时器允许在创建前设置一个 软件定时器定时超时时间&#xff0c;在软件定时器成功创建并启动后&#xff0c;软件定时器开始定时&#xff0c;当软件定 时器的定时时间达到或超过先前设置好的软件定时…

异地组网怎么安装?

异地组网安装是指在不同地域的多个设备之间建立网络连接&#xff0c;以便实现数据传输和协同工作的过程。在如今的数字化时代&#xff0c;异地组网安装已经成为了许多企业和组织所必需的一项技术。 天联的使用场景 在异地组网安装中&#xff0c;天联是一种常用的工具。它具有以…

锁策略总结

锁策略 悲观锁和乐观锁 乐观锁和悲观锁不是具体类型的锁而是指两种不同的对待加锁的态度&#xff0c;这两个锁面对锁冲突的态度是相反的。 乐观锁&#xff1a;认为不存在很多的并发操作&#xff0c;因此不需要加锁。悲观锁&#xff1a;认为存在很多并发操作&#xff0c;因此需…

ffmpeg命令与批处理编程

(一) CMD脚本查找所有文件 powershell与cmd转换 powershell与cmd虽然同为windows命令&#xff0c;但许多命令并不通用。 CMD换行符 a 在CMD下&#xff0c;可以用^作为换行符&#xff0c;类似于Linux下的\。举例如下&#xff1a; start pemu.exe ^ -net nic,vlan1,macaddr…

OpenKylin设置root密码

前言 新安装的OpenKylin系统应该root用户没有设置密码&#xff0c;但是可以使用sudo -i 临时获取root权限&#xff0c;不影响正常使用 当前是root用户 1、终端输入passwd命令 passwd2、按照提示输入新密码和确认密码 当前非root用户 1、终端输入sudo passwd root 命令 s…

设计模式面试题

概述 设计模式分类 创建型模式 用于描述“怎样创建对象”&#xff0c;主要特点是“将对象的创建与使用分离”。使用者不需要官族对象创建的细节。结构型模式 用于描述如何将类或对象按照某种布局组成更大的结构。行为型模式 用于描述类或对象之间怎样相互协作共同完成单个对象…

没有学历,没有基础,是否能成为一个嵌入式工程师?

没有学历&#xff0c;且毫无基础&#xff0c;是否真的能够成为一名嵌入式工程师呢&#xff1f;想要成为一名真正足以胜任上下游工作的工程师&#xff0c;至少是需要耗费五年时间的。在这一过程当中&#xff0c;你将会遭遇各式各样的挑战&#xff0c;需要去掌控操作系统、数据结…

实时数据同步之Maxwell和Canal

文章目录 一、概述1、实时同步工具概述1.1 Maxwell 概述1.2 Canal概述 2、数据同步工作原理2.1 MySQL 主从复制过程2.2 两种工具工作原理 3、MySQL 的 binlog详解3.1 什么是 binlog3.2 binlog 的开启3.3 binlog 的分类设置 4、Maxwell和Canal对比5、环境安装 二、Maxwell 使用1…