MongoDB基础知识

​ 文档是mongodb中的最初单元,类似于mysql中的行,集合可以看做一个具有动态模式的表,mongodb可以拥有多个互相独立的数据库,每个数据库,都拥有自己的集合;每一个文档都有一个特殊的健:“_id”,这个健在文档所在的集合中是独一无二的;mongodb自带了一个功能强大的shell,可以用于管理mongodb。

一、文档

文档是键值对的一个有序集,{“hgq”:“123”,“tzy”:“123”}与{“tzy”:“123”,“hgq”:“123”}是完全不同的两个文档;

文档严格区分大小写,还需分类型,{“tzy”:“1234”,“tzy”:123},前者代表字符串,后者代表数字;

在文档中,不能有重复的键,{“tzy”:“1234”,“tzy”:“123”}是不合法的

二、集合

集合就是一组文档,如果将文档比喻成mysql中的行,集合相当于一张表

1、动态模式

一个集合里面的文档可以是各种个样的,可以没有固定的格式。

为什么使用多个集合?

  • 方便管理,进行分类
  • 查询速度快
  • 数据会更加集中
  • 方便常见索引

2、命名

不能包涵\0字符串,这字符表示集合名称结束

不能以”system.“开头,这个是为系统集合保留的,比如system.users保存的是用户的信息,system.namespaces保存所有集合的信息

3、子集合

推荐使用子集合,组织数据更加高效。

例如博客系统,子集合blog.posts和blog.authors,为了使组织结构更加清晰,这里的blog集合甚至都不需要存在,blog集合和子集合没有什么关系。

三、数据库

在mongoDB中,多个文档组成集合,多个集合可以组成数据库。一个mongoDB可以有多个库,每个库都有独立的权限,即使在磁盘中,不同的数据库也放置在不同的文件中,在文件中,数据库名对应着目录的文件名,相关命名规则也保持和文件命名规则相同。

默认数据库

  1. admin:如果将用户添加到admin数据库,则默认获得所有数据库的权限,一切特定的命令必须在admin数据库运行,比如列出所有数据库或者关闭服务器。
  2. local:此数据库不可复制,所有的本地集合被存在这个数据库中。
  3. config:分片相关配置存放在此数据库中。

四、mongodb shell简介

登录mongodb

mongo mongodb://<my ip>:27017

1、shell中的基本操作

默认会进入test数据库,可以通过db命令查看

>db
test

查看所有数据库

>show dbs;

切换数据库

>use admin;
1、创建
#定义post
>post ={"name":"hgq","age":18,"class":"4"}
{ "name" : "hgq", "age" : 18, "class" : "4" }#将post插入到foo集合中
>db.foo.insert(post)
WriteResult({ "nInserted" : 1 })#查看foo集合
>db.foo.find()
{ "_id" : ObjectId("667106f462f6c8bf0225adbd"), "name" : "hgq", "age" : 18, "class" : "4" }

可以看到输入的键值被完整记录,还有一个额外添加的键值"_id"

2、读取

find和findOne都可以查看集群中的文档,find默认会返回20个文档,findOne只会返回一个文档。后面会详细介绍查询

3、更新

使用update进行更新数据,update至少需要两个参数,第一个是限定条件,用于匹配待更新的文档,第二个是新文档。

>post.comments=[]
#插入post
>db.foo.update({class:"4"},post)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
#查看foo集合
>db.foo.find()
{ "_id" : ObjectId("667106f462f6c8bf0225adbd"), "name" : "hgq", "age" : 18, "class" : "4", "comments" : [ ] }
4、删除

通过remove进行删除,删除匹配的文档

> db.foo.remove({"class":"4"})
#查看foo集合
>db.foo.find()

五、数据类型

1、基本数据类型

一共有6种基本的数据类型:nul l、布尔、数字、字符串、数组、对象

null:表示空值或者不存在的字段

布尔型:true、false

数值:包括整型和浮点型

字符串:UTF-8都支持

日期:日期被存储为新纪元以来的毫秒数

{"s""new Data()}

数组:

{""}

内嵌文档

{"2":{"11":"33"}}

对象id

{ "_id" : ObjectId("666a6e7e97a427d1d07460b5") }

/Public/极无双2/极2包/对外测试/HMT公测/1.20.X/win/1.20.602

2、日期

日期:日期被存储为新纪元以来的毫秒数,并未存储对应时区

{"s""new Data()}

3、数组

数组是一组值,可以作为有序对象,也能作为无序对象来操作。

{"hgq":["xx",11]}

数组中可以包含不同类型的数据,可以对数组进行查询和修改

4、内嵌文档

示例如下,可以更加直观的显示层级信息

{"2":{"11":"33"}}

5、_id和ObjectID

每一个文档必须有一个_id键,默认是一个ObjectId对象,在一个集合里面,每个对象都有一个唯一的id,确保集合中的文档被唯一标识,会自动生成。

六、使用mongodb shell

.mongorc.js文件存在于每个用户家目录下

通过修改.mongorc.js文件来移除比较危险的命令,也就是重写内置的函数

cat .mongorc.js var no=function(){
print("注意⚠️,线上数据库,切勿执行删除操作!!!")
};
//禁止删除数据库
db.dropDatabase=DB.prototype.dropDatabase = no ;
//禁止删除集合
DBCollection.prototype.drop = no ;
//禁止删除索引
DBCollection.prototype.dropIndex = no ;

显示效果

> db.dropDatabase()
注意⚠️,线上数据库,切勿执行删除操作!!!

此操作并不能保护数据库收到恶意攻击,只能防止自己人手误。

在启动时添加“–norc”参数,就可以禁止加载.mongorc.js文件

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

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

相关文章

“一站式企业服务平台”的功能架构

为提升区域营商环境&#xff0c;为促进区域经济发展&#xff0c;实现资源高效配置&#xff0c;全国各区域政府及产业园区都越来越重视如何创新企业服务机制、提升企业服务水平&#xff0c;来保障区域内的企业稳定及帮扶企业高质量的发展。随着近年来大数据、人工智能等新一代信…

前端记录日志生成文件保存到本地

一、前言 项目上线后业务人员反馈说是打印数据不准确&#xff0c;通过websocket连接打印机服务去进行打印&#xff0c;会出现条码漏打的情况&#xff1b;通过后端日志和打印机日志均没有找到问题原因&#xff0c;猜测是websocket连接断开导致的问题。 也想通过前端日志去排查…

第9天:静态文件和媒体文件管理

第9天&#xff1a;静态文件和媒体文件管理 目标 管理静态资源&#xff08;如CSS、JavaScript、图片等&#xff09;和用户上传的文件。 任务概览 配置静态文件和媒体文件的存储路径。学习如何收集和压缩静态文件。 详细步骤 1. 配置静态文件和媒体文件的存储路径 在setti…

Redis 分布式锁教程

Redis 分布式锁教程 简介 在分布式系统中&#xff0c;多个进程可能会尝试同时访问共享资源&#xff0c;这会导致数据不一致或者竞争条件。分布式锁是一种用于控制对共享资源访问的机制。Redis 是一个流行的内存数据存储系统&#xff0c;可以用来实现分布式锁。 本文将介绍如…

react项目中如何书写css

一&#xff1a;问题&#xff1a; 在 vue 项目中&#xff0c;我们书写css的方式很简单&#xff0c;就是在 .vue文件中写style标签&#xff0c;然后加上scope属性&#xff0c;就可以隔离当前组件的样式&#xff0c;但是在react中&#xff0c;是没有这个东西的&#xff0c;如果直…

【学一点儿前端】单页面点击前进或后退按钮导致的内存泄露问题(history.listen监听器清除)

今天测试分配了一个比较奇怪的问题&#xff0c;在单页面应用中&#xff0c;反复点击“上一步”和“下一步”按钮时&#xff0c;界面表现出逐渐变得卡顿。为分析这一问题&#xff0c;我用Chrome的性能监控工具进行了浏览器性能录制。结果显示&#xff0c;每次点击“上一步”按钮…

Mars3d实现汽车尾气粒子效果从汽车屁股开始发射效果

本身的汽车尾气粒子效果&#xff1a;在汽车模型的中间发射的↓↓↓↓↓↓↓↓↓↓↓ Mars3d实例中是使用transY偏移值实现汽车尾气粒子效果从汽车屁股开始发射效果&#xff1a; // 动态运行车辆的尾气粒子效果 function addDemoGraphic4(graphicLayer) {const fixedRoute new…

三星与SK海力士:以混合键合技术引领3D DRAM革新之路

在高速缓存内存&#xff08;HBM&#xff09;领域持续领跑的三星与SK海力士&#xff0c;正以混合键合技术为突破口&#xff0c;开启3D DRAM技术的新纪元。这一战略转型不仅预示着存储技术的深度革新&#xff0c;更体现了两大半导体巨头在提高集成度、优化性能与成本上的不懈追求…

如何恢复电脑硬盘删除数据?提供一套实用恢复方案

在数字化时代&#xff0c;电脑硬盘中存储的数据对于个人和企业来说都至关重要。然而&#xff0c;有时我们可能会不小心删除了一些重要文件&#xff0c;或者因为某种原因导致数据丢失。这时候&#xff0c;恢复硬盘上被删除的数据就显得尤为重要。本文将为您提供一套实用的电脑硬…

光电数鸡算法《java》

一&#xff1a;需求 题目&#xff1a;一条流水线有工位D1,D2,D3…D20,总共20个工位。 每个工位都装有一个光电计数器&#xff0c;每个工位都为本工位的计数减去前一个工位&#xff08;第一个有数值的工位除外&#xff0c;不计算。&#xff09; 计算规则&#xff1a;比如D1,D2都…

在自托管基础设施上使用 GitOps 部署 MinIO

基于MinIO Weaviate Python GitOps探索的见解&#xff0c;本文探讨了如何增强软件部署流程的自动化。 通过将 GitHub Actions 与 Docker Swarm 集成而产生的协同作用&#xff0c;以自托管基础架构的稳健性为基础&#xff0c;标志着 CI/CD 实践的关键进步。这种方法不仅利用了软…

Go语言开发框架GoFly已集成数据可视化大屏开发功能,让开发者只专注业务开发,本文指导大家如何使用

前言 框架提供数据大屏开发基础&#xff0c;是考虑当前市场软件应用有一大部分是需要把业务数据做出大屏&#xff0c;很多政府项目对大屏需求特别高&#xff0c;还有生产企业项目也对大屏有需求&#xff0c;没有提供基础规范的后台框架&#xff0c;在开发大屏需要很多时间去基…

Mentor Xpedition怎么切换中英文界面

1、Mentor Xpedition的Layout界面&#xff0c;切换中英文的方法如下图&#xff1b; 切换英文设置&#xff0c;设置系统环境变量&#xff1a;MGC_PCB_LANGUAGEEnglish&#xff0c;重新打开软件即可切换成中文界面&#xff1b; 如果想要在切换成中文&#xff0c;把标量值改为Chi…

SegFormer模型

文章目录 SegFormer模型详细讲解SegFormer的架构1. Hierarchical Transformer Encoder2. MLP Decoder SegFormer的优点SegFormer的应用SegFormer的创新点代码部分讲解 SegFormer模型详细讲解 SegFormer是一个用于图像语义分割的深度学习模型&#xff0c;它结合了Transformer架…

万能引用与完美转发

万能引用与完美转发 万能引用完美转发完美转发的应用场景万能引用的一个小点 万能引用 注意&#xff1a;当&&出现在模板中时&#xff0c;不是右值引用&#xff0c;而是叫万能引用。比如下面的T&& t template<typename T> void PerfectForward(T&&a…

民宿在线预订系统

摘要 随着国家的发展&#xff0c;人们也更加重视自己的业余时间。在特定的假期或休闲时间外出度假已逐渐成为这个时代的趋势。在我国&#xff0c;随着经济的发展和城市居民物质生活水平的提高&#xff0c;旅游业也呈现出越来越受欢迎的趋势。同时随着人口的快速流动&#xff0…

jQuery事件和其他方法

&#xff08;2&#xff09;jQuery 事件处理 2.1 事件处理 on() 绑定事件 on() 方法在匹配元素上绑定一个或多个事件的事件处理函数&#xff1b; 语法演示如下&#xff1a; element.on(events,[selector],fn)&#x1f606;温馨提醒&#x1f606;&#xff1a; events&#xff…

Leetcode 522. 最长特殊序列 II (判断子序列 优化)

Leetcode 522. 最长特殊序列 II 暴力枚举 根据特殊序列的定义&#xff0c;枚举出每个 strs[ i ] 的所有子序列&#xff0c;再将这个子序列与strs中的其他串比较判断 使用二进制位运算枚举一个str的所有子序列 使用双指针指向两个串的开头&#xff0c;同时移动判断是否是子序列…

代理网络基础设施 101:增强安全性、速度和可扩展性

编辑代理网络在现代网络架构中发挥着重要作用&#xff0c;充当管理和重新路由数据流的中介。它们处理的数据可以是各种类型&#xff0c;包括搜索查询和潜在的敏感客户信息&#xff0c;这凸显了它们在数据安全方面的作用。 然而&#xff0c;代理的好处不仅限于安全性。它们为用…

类AAAAAAAAAAAA迭代

class A {vector<A>} C 迭代 这个代码在C中是不能编译的&#xff0c;因为它会导致无限的嵌套&#xff0c;因为std::vector<A>会持有A类型的实例&#xff0c;而A类型的实例又会包含一个std::vector<A>&#xff0c;这会无限制地复制和嵌套下去。 如果你想要创…