关于MongoDB

MongoDB介绍

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

为什么要使用nosql?

  • Nosql简介

    • NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

    • NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

  • 发展现状

    • 现今的计算机体系结构在数据存储方面要求应用架构具备庞大的水平扩展性,而NoSQL正在致力于改变这一现状。目前新浪微博的 Redis和 Google 的 Bigtable 以及 Amazon的 SimpleDB使用的就是 NoSQL 型数据库。

    • ** NoSQL 项目的名字上看不出什么相同之处,但是,它们通常在某些方面相同:它们可以处理超大量的数据。**

    • ** 这场革命目前仍然需要等待。NoSQL 对大型企业来说还不是主流,但是,一两年之后很可能就会变个样子。在 NoSQL 运动的最新一次聚会中,来自世界各地的 150 人挤满了 CBS Interactive 的一间会议室。分享他们如何推翻缓慢而昂贵的关系数据库的暴政,怎样使用更有效和更便宜的方法来管理数据。**

    • ** 关系型数据库给你强加了太多东西。它们要你强行修改对象数据,以满足数据库系统的需要。在 NoSQL 拥护者们来看,基于 NoSQL 的数据库替代方案“只是给你所需要的”**

  • Nosql特点

    • 1 它可以处理超大量的数据

    • 2 它运行在便宜的 PC 服务器集群上 PC

      • 集群扩充起来非常方便并且成本很低,避免了传统商业数据库“sharding”操作的复杂性和成本。

    • 3 它击碎了性能瓶颈

      • NoSQL 的支持者称,通过 NoSQL 架构可以省去将 Web 或 Java 应用和数据转换成 SQL 格式的时间,执行速度变得更快。“SQL并非适用于所有的程序代码”,对于那些繁重的重复操作的数据,SQL 值得花钱。但是当数据库结构非常简单时,SQL 可能没有太大用处

    • 4 它没有过多的操作

      • 虽然 NoSQL 的支持者也承认关系型数据库提供了无可比拟的功能集合,而且在数据完整性上也发挥绝对稳定,他们同时也表示,企业的具体需求可能没有那么复杂

    • 5 它的支持者源于社区

      • 因为 NoSQL 项目都是开源的,因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样,不得不从社区中寻求支持

  • MongoDB特点

    • 1 面向集合(Collenction-Orented)

      • 意思是数据被分组存储在数据集中, 被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库里的表(table),不同的是它不需要定义任何模式(schema)

    • 2 模式自由(schema-free)

      • 意味着对于存储在 MongoDB 数据库中的文件,我们不需要知道它的任何结构定义。提了这么多次"无模式"或"模式自由",它到是个什么概念呢?例如,下面两个记录可以存在于同一个集合里面: {"welcome" : "Beijing"} {"age" : 25}

    • 3 文档型

      • 意思是我们存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档. 我们把这个数据格式称作 “BSON” 即 “Binary Serialized document Notation.”

MongoDB下载与安装

MongoDB官网

  • 下载地址:https://www.mongodb.com/try/download/community

  • 指定版本,操作系统下载:

  • 安装步骤参考地址: MongoDB安装(超详细)_mongodb 安装-CSDN博客

启动MongoDB

终端命令: mongod --dbpath C:\Program Files\MongoDB\Server\4.4\data image.png

连接MongoDB

  • 在环境变量设置好的前提下,在终端输入命令mongo就可以进入到mongo的操作终端了。

配置环境变量参考如下: MongoDB数据库:安装、配置系统环境变量、和基础命令_mongodb环境变量_我不得鸟的博客-CSDN博客

  • 图例所示:image.png

MongoDB概念解析

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。 下表将帮助您更容易理解Mongo中的一些概念:

image.png

MongoDB三要素

  • 数据库:一个集合的物理容器,一个数据库可以包含多个文档(一个服务器通常有多个数据库)。

  • 文档:就是关系型数据库中的一行。文档是一个对象,由键值对构成,是json的扩展形式

  • 集合:类似于关系型数据库中的表,集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

MongoDB数据类型

  • String:字符串,必须是有效的UTF-8

  • Boolean:存储一个布尔值,true或者false

  • Integer:整数可以是32位或64位,这取决于服务器

  • Double:存储浮点数

  • Arrays:数组或列表

  • Object:嵌入式文档

  • Null:存储Null值

  • Timestamp:时间戳, 表示从1970-1-1到现在的总秒数

  • Object ID是一个12字节的十六进制数

MongoDB操作数据库的常用命令

  • show dbs 查看所有数据库

image.png

  • db 查看现在用的数据库 (MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。)

image.png

  • cls 清屏的命令

  • use admin 如果数据库不存在,则创建数据库,否则切换到指定数据库。

image.png 注意点:我们刚创建的数据库 demo01并不在数据库的列表中, 要显示它,我们需要向 demo01数据库插入一些数据。 image.png

  • db.dropDatabase() 要删除某个数据库 需要切换到该数据库 通过use 和db进行切换

image.png

  • 自动创建集合

    • 在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

MongoDB删除集合

MongoDB插入文档(简单的理解就是在集合/表中插入数据)

  • insert插入多条数据

for(i=3;i<10;i++)db.test01.insert({x:i})

image.png

  • image.png

MongoDB更新文档

  • db.集合名称.update({query}, {update}, {multi: boolean})

    • 参数query:查询条件

    • 参数update:更新操作符

    • 参数multi:可选,默认是false,表示只更新找到的第一条数据,值为true表示把满足条件的数据全部更新

  • db.stu.update({name:'jerry'},{name:'杰瑞'}) 这种情况下 会改变name 但是其他的会被删除、

  • db.stu.update({name:'张三'},{$set:{name:'张三丰'}}) 这种情况下 会改变name并且其他的信息也不会变化

image.png

  • 更新多条 比如说将所有的gender变成0 此时会发现 如果没有gender这个属性会进行添加

image.png

MongoDB删除文档

  • remove() 方法的基本语法

    • db.collection.remove(<query>, <justOne> )

    • query : 删除的文档的条件。

    • justOne : 如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

  • 删除符合条件的第一条数据

MongoDB创建索引

测试数据集

for(i=0;i<100000;i++){db.test.insert({name:'test'+i,age:i})}

为什么要用到索引 ?

  • 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

  • 这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

  • 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

    创建索引前

db.test.find({name:'test9999'})
db.test.find({name:'test9999'}).explain('executionStats') # 显示查询操作的详细信息"executionTimeMillis" : 39, 测试结果  "executionTimeMillis" : 37, 这个结果不唯一 

怎么去创建索引

db.test.ensureIndex({name:1})

创建索引后

db.test.find({name:'test9999'}).explain('executionStats')"executionTimeMillis" : 6, 测试结果 
"executionTimeMillis" : 0,

查看所有的索引

db.test.getIndexes()
默认情况下_id是集合的索引

删除索引

语法:db.集合名.dropIndex({'索引名称':1})
db.test.dropIndex({name:1})
db.test.getIndexes()

注意点: 注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。 拓展: 关于mongodb资料参考:MongoDB 索引 | 菜鸟教程

python与MongoDB交互

数据库的连接

from pymongo import MongoClient# 连接
client = MongoClient()
MongoDB交互的增删改查import pymongo
from pymongo import MongoClient
​
​
class Mongo_python:# 初始化方法def __init__(self, HOST, PORT):self.HOST = HOSTself.PORT = PORT# 连接self.client = MongoClient(HOST, PORT)
​# 插入数据def insert_data(self):# 插入单条数据# self.client.school.teacher.insert_one({"name": "李璐2", "role": "学生"})# 插入多条数据self.client.school.teacher.insert_many([{"name": "XH"}, {"name": "YU"}])
​# 查询数据def query_data(self):try:teachers = self.client.school.teacher.find()# print(list(teachers),type(teachers))# for one in teachers:#     print("查找多条数据:", one["_id"], one["name"])
​teacher = self.client.school.teacher.find_one({"name": "李璐2"})print("查找单条数据:", teacher["_id"], teacher["name"])except Exception as e:print(e)
​# 修改数据def set_data(self):# 修改多条数据# self.client.school.teacher.update_many(#     {}, {"$set": {"role": "班主任11111"}}## )# 修改单条数据# self.client.school.teacher.update_one({"name": "YU"}, {"$set": {"sex": "女"}})# push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。self.client.school.teacher.update_one({"name": "YU"}, {"$push": {"sdarole": "年级主任"}})
​# 删除数据def delete_data(self):try:# 删除单条数据# self.client.school.teacher.delete_one({"name": "晨刚"})# 删除多条数据# 第一个参数是一个查询对象,用于定义要删除的文档query = {"name": '李璐2'}self.client.school.teacher.delete_many(query)except Exception as e:print(e)
​
​
if __name__ == '__main__':mg = Mongo_python('localhost', 27017)# mg.insert_data()# mg.query_data()# mg.set_data()mg.delete_data()

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

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

相关文章

Panorama SCADA平台助力智能建筑管理,掌控未来建筑!

来源&#xff1a;宏集科技 工业物联网 宏集方案 Panorama SCADA平台助力智能建筑管理&#xff0c;掌控未来建筑&#xff01; 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 前言 在现代智能建筑管理中&#xff0c;随着设施管理&#xff08;FM&#xff09;、建筑管理…

数据结构与算法--特殊的完全二叉树--堆,堆排序,利用堆解决topk的问题

目录 前言 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树&#xff1a; 2.3 特殊的二叉树&#xff1a; 2.4 二叉树的性质 …

YOLOv7独家原创改进:自研独家创新MSAM注意力,通道注意力升级,魔改CBAM

💡💡💡本文自研创新改进:MSAM(CBAM升级版):通道注意力具备多尺度性能,多分支深度卷积更好的提取多尺度特征,最后高效结合空间注意力 1)作为注意力MSAM使用; 推荐指数:五星 MSCA | 亲测在多个数据集能够实现涨点,对标CBAM。 在道路缺陷检测任务中,原始ma…

基于STM32+定时器中断和定时器外部时钟(标准库函数讲解)

前言 本篇博客主要学习了解定时器的标准库函数&#xff0c;以及定时器中断进行LED灯的反转&#xff0c;还有定时器外部时钟获取脉冲计数功能。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联系我删除。 本篇博客主要是对通用定时器来讲解&#xff0c;功能适中比较常…

Java高级技术(注解)

一&#xff0c;注解 二&#xff0c;案例 三&#xff0c;注解原理 四&#xff0c;元注解 五&#xff0c;案例 六&#xff0c;解析注解 七&#xff0c;案例

unity UI特效遮罩

using System.Collections; using System.Collections.Generic; using UnityEngine;/**UI特效遮罩 1.需要将ScrollRect 的遮罩Mask 换为 2D Mask2.将特效的Render里面的 Masking 设置为*/ public class UIParticleMaskControll : MonoBehaviour {// Start is called before …

低代码平台:房企建造领域数字化转型的必备利器

在数字化浪潮的推动下&#xff0c;越来越多的行业开始向数字化转型迈进&#xff0c;房地产建筑管理也不例外。低代码平台作为一种新兴的技术趋势&#xff0c;正逐渐成为推进房地产建筑管理数字化转型的重要工具。 房地产建筑管理作为一个庞大而复杂的行业&#xff0c;数字化转…

『Confetti 喜庆散花插件の使用』

以下用 VUE3 语法 举例使用&#xff1a; npm install js-confetti<script setup lang"ts"> import JSConfetti from js-confetticonst confetti new JSConfetti()function showConfetti() {confetti.addConfetti() } </script><template><h1 …

视频剪辑技巧:批量剪辑新思路,AI智剪来助阵

在视频制作过程中&#xff0c;剪辑是一项至关重要的任务。然而&#xff0c;对于许多创作者来说&#xff0c;批量剪辑视频是一项耗时且繁琐的工作。传统的批量剪辑方法通常要创作者逐个打开视频文件&#xff0c;进行剪辑、调整色彩等操作。这种方法不仅效率低下&#xff0c;而且…

探索低代码之路——JNPF

目录 一、低代码行业现状 二、产品分析 1.可视化应用开发 2.流程管理 3.整个平台源码合作 三、架构和技术 技术栈 四、规划和展望 低代码平台&#xff08;Low-code Development Platform&#xff09;是一种让开发者通过拖拽和配置&#xff0c;而非传统的手动编写大量代…

Linux 启动过程

linux启动步骤&#xff1a; <1>加电 <2>加载bios设置 <3>加载grup <4>加载内核系统到内存中 <5>加载配置文件 <6>加载内核模块 <7>完成相应的初始化工作和启动相应的服务 <8>启动系统进程 <9>出现登录界面 &l…

Python 装饰器与偏函数

目录 装饰器 概念 简单的装饰器 复杂点的装饰器 通用装饰器 定义通用装饰器 使用装饰器 偏函数 引入类库 应用 总结 装饰器 概念 装饰器就是个闭包&#xff1b;把一个函数当做参数&#xff0c;返回一个修改过功能的函数&#xff1b; 本质上是一个返回函数的函数。…

基于Java SSM框架+Vue实现垃圾分类网站系统项目【项目源码+论文说明】

基于java的SSM框架Vue实现垃圾分类网站系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述…

2023年国内主流的低代码平台

低代码开发平台&#xff08;Low-Code Development Platform, LCDS&#xff09;为企业和开发者提供了高效的应用开发方式。这些平台使得开发者可以通过简化的设计界面快速创建和部署应用&#xff0c;大大提高了开发效率并降低了开发成本。 伴随数字化转型推进&#xff0c;选购低…

C++中用于动态内存的new和delete操作符

文章目录 1、动态分配内存的应用2、动态分配内存与分配给普通变量的内存有什么不同?3、C 中如何分配/释放内存4、new 操作符4.1 使用new的语法4.2 初始化内存4.3 分配内存块4.4 普通数组声明 Vs 使用new4.5 如果运行时没有足够内存可用怎么办&#xff1f; 5、delete 操作符 C/…

使用Perplexity AI免费白嫖GPT4的使用次数((智能搜索工具)

一、Perplexity AI是什么 Perplexity AI是一款高质量的智能搜索工具&#xff0c;它可以为用户提供简洁清晰的搜索体验。Perplexity AI内置了基于GPT-4的Copilot搜索功能&#xff0c;用户可以在每四个小时使用五次(白嫖GPT-4)。此外&#xff0c;Perplexity AI有免费和付费&#…

C++——取地址和自增运算

今天做了道题一下给我整蒙了&#xff0c;把实验探索发篇文章&#xff0c;题目如下&#xff1a; int a[]{10,11,12},*p&a[0];执行完*p;*p1;后a[0],a[1],a[2]的值各为多少 答案是 10, 12, 12怎么理解*p,*p1呢&#xff0c;我觉得可以用汉语把代码读一下&#xff0c;p&#xf…

【寒武纪(6)】MLU推理加速引擎MagicMind,最佳实践(三)使用框架模型ONNX

支持情况 Pytorch 只支持 1.6.0 导出。 如何生成ONNX&#xff1f; 解析失败 包括&#xff1a;Parse 过程转换失败node index&#xff0c;不支持的模型输入tensor name&#xff0c;不支持的控制流子图输入tensor name。 提取支持的子图

ArkTs变量类型、数据类型

可以参考官网学习路径学习HarmonyOS第一课|应用开发视频教程学习|HarmonyOS应用开发官网 一、变量 1、ArkTS语言 ArkTS是华为自研的开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的…

【Android Jetpack】Room数据库

文章目录 引入EntitiesPrimary Key主键索引和唯一性对象之间的关系外键获取关联的Entity对象嵌套对象Data Access Objects&#xff08;DAOs&#xff09;使用Query注解的方法简单的查询带参数查询返回列的子集可被观察的查询 数据库迁移用法 引入 原始的SQLite有以下两个缺点: …