关于MongoDB

news2024/11/17 1:46:39

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 = HOST
        self.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.coloradmin.cn/o/1270740.html

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

相关文章

滤波器、卷积核与内核的关系

上来先总结举例子解释 上来先总结 内核&#xff08;kernel&#xff09;是一个二维矩阵&#xff0c;长*宽&#xff1b;滤波器&#xff08;filter&#xff09;也叫卷积核&#xff0c;过滤器。是一个三维立方体&#xff0c;长 宽 深度&#xff0c; 其中深度便是由多少张内核构成…

el-row错位问题解决

<el-row type"flex" style"flex-wrap:wrap">

有时出厂重置BIOS是解决电脑问题和保持其最佳性能的好办法,主要有两种方法

​BIOS是计算机开机时启动的第一个程序&#xff0c;它有助于执行一些基本的计算机操作&#xff0c;并管理计算机和安装在计算机上的操作系统之间的命令。与任何其他程序一样&#xff0c;如果在启动计算机时遇到问题或在计算机中添加了新硬件&#xff0c;则可能需要将BIOS重置为…

热点热搜排行榜网站源码/网址导航源码/影视排行榜HTML源码

源码简介&#xff1a; 热点热搜排行榜网站源码/网址导航网站源码/影视排行榜HTML源码/ 精美网址导航及热点热搜影视排行榜源码&#xff0c;可以让人全方位的浏览体验&#xff0c; 非常好看的网址导航&#xff0c;以及热点热搜影视等排行榜源码。它是仿某汁导航网&#xff0c;…

医院手术麻醉信息系统全套商业源码,自主版权,支持二次开发

医院手术麻醉信息系统全套商业源码&#xff0c;自主版权&#xff0c;支持二次开发 手术麻醉信息系统是HIS产品的中的一个组成部分&#xff0c;主要应用于医院的麻醉科&#xff0c;属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程&#xff0c;包括手术申请与…

Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想

目录 一、Lombok工具包下载 二、前后端互联的图书管理系统 规范 三、分层思想 三层架构&#xff1a; 1.表现层 2.业务逻辑层 3.数据层 一、Lombok工具包下载 这个工具包是为了做什么呢&#xff1f; 他是为了不去反复的设置setting and getting 而去产生的工具包 ⚠️工具…

我若拿出这个,阁下该如何应对,整理常用的Python库!

Requests Requests是一个常用的Python第三方库&#xff0c;用于发送HTTP请求。它提供了简洁而直观的API&#xff0c;使得发送HTTP请求变得非常方便。 使用Requests库可以实现以下功能&#xff1a; 发送GET请求&#xff1a;使用requests.get(url, paramsNone, **kwargs)方法发…

vue2全局混入正确使用场景和错误场景示例

全局混入在 Vue.js 中的使用场景需要谨慎考虑&#xff0c;因为它会影响所有组件。以下是一些正确和错误的使用场景的例子&#xff1a; 正确的使用场景&#xff1a; 全局工具方法&#xff1a; // 正确的使用场景 Vue.mixin({methods: {$formatDate: function (date) {// 格式化…

K8s 多租户方案的挑战与价值

在当今企业环境中&#xff0c;随着业务的快速增长和多样化&#xff0c;服务器和云资源的管理会越来越让人头疼。K8s 虽然很强大&#xff0c;但在处理多个部门或团队的业务部署需求时&#xff0c;如果缺乏有效的多租户支持&#xff0c;在效率和资源管理方面都会不尽如人意。 本…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之存储管理(1)》(14)

[TOC](《Linux操作系统原理分析之存储管理》&#xff08;14&#xff09; 5 存储管理5.1 存储管理的目的和功能5.1.1 存储管理目的&#xff1a;5.1.2 存储管理的主要功能5.1.3 存储管理主要是对用户区进行管理 5.2 地址重定位5.2.1 作业的地址空间5.2.2&#xff0e;地址映射&…

企业微信小程序通知消息

使用企业微信发送应用消息中的小程序通知消息&#xff08;只允许绑定了小程序的应用发送&#xff09;。 目录 请求方式 请求地址 发送通知 参数说明 请求实例 返回 返回示例 返回参数说明 实现效果 总结 请求方式 POST 请求地址 https://qyapi.weixin.qq.com/cgi-b…

【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)

文章目录 前言正文一、POM依赖二、核心Java文件2.1 自定义表头注解 ExcelColumnTitle2.2 自定义标题头的映射接口2.3 自定义有序map存储表内数据2.4 表头工厂2.5 表flag和表头映射枚举2.6 测试用的实体2.6.1 NameAndFactoryDemo2.6.2 StudentDemo 2.7 启动类2.8 测试控制器 三、…

关于UART、RS232、RS485的区别与理解

1、UART规定了数据的格式&#xff0c;但没有规定电气的特性&#xff0c;多少伏为高电平&#xff0c;多少伏为低电平。通常我们使用单片机与电脑通信时需要一个USB转TTL模块。 2、UART存在抗干扰能力差、通信距离短&#xff08;一般不超过2~3m&#xff09;,由此产生基于串口的R…

2023 BUCT 计算方法实验报告

前言 Textlive版本&#xff1a;2023 textstudio版本&#xff1a;4.6.3 名字和日期在以下地方修改: 图片下载地址; figures.zip LiangCha_Xyy/Source - Gitee.com 如下图&#xff0c;.tex文件和figures文件夹放在同一路径下即可 .tex代码 \documentclass[UTF8]{ctexart} \usep…

Python数据分析从入门到进阶:模型评估和选择(含代码)

引言 之前我们介绍了机器学习的一些基础性工作&#xff0c;介绍了如何对数据进行预处理&#xff0c;接下来我们可以根据这些数据以及我们的研究目标建立模型。那么如何选择合适的模型呢&#xff1f;首先需要对这些模型的效果进行评估。本文介绍如何使用sklearn代码进行模型评估…

常见算法和Lambda表达式

常见算法和Lambda 常见算法 查找算法 基本查找 从0索引开始逐个查找 代码演示: package Search;import java.util.ArrayList;public class BasicSearch {public static void main(String[] args) {int[] arr {1,2,3,4,5,6,3,4,1,3};ArrayList<Integer> resArr ba…

第二证券:机构争分夺秒抢滩 金融大模型落地为时尚早

本年以来&#xff0c;大模型席卷金融业&#xff0c;一夜之间&#xff0c;简直悉数金融场景都在探索适配大模型接口。但是&#xff0c;志向丰满&#xff0c;实践骨感。有大型金融组织IT部分人士比方&#xff0c;金融大模型从战略规划到安顿落地&#xff0c;有着从“卖家秀”走到…

Docker 下载加速

文章目录 方式1&#xff1a;使用 网易数帆容器镜像仓库进行下载。方式2&#xff1a;配置阿里云加速。方式3&#xff1a;方式4&#xff1a;结尾注意 Docker下载加速的原理是&#xff0c;在拉取镜像时使用一个国内的镜像站点&#xff0c;该站点已经缓存了各个版本的官方 Docker 镜…

两台电脑如何快速传输几百G文件,这款文件传输软件真快

当我们需要传输数百GB的文件时&#xff0c;使用传统工具对于大型文件传输来说往往效率低下。这些方法可能需要数小时&#xff0c;甚至数天才能完成传输。然而&#xff0c;现代生活和工作中&#xff0c;我们经常需要以更快速、更高效的方式传输大文件&#xff0c;无论是因为工作…

连锁零售企业如何提高异地组网的稳定性?

随着数字化时代的到来&#xff0c;连锁零售企业面临着日益复杂和多样化的网络挑战。连锁零售企业是在不同地理位置拥有分支机构和零售店&#xff0c;可能同城或异地&#xff0c;需要确保各个地点之间的网络连接稳定和可靠。但由于不同地区的网络基础设施差异、网络延迟和带宽限…