python数据库——Mongodb

一、Mongodb简介

MongoDB 是一个开源的 NoSQL数据库系统,它是一个面向文档的数据库,使用 JSON 格式来存储和查询数据。MongoDB 是一个非关系型数据库,它的设计目标是以高性能、高可用性和可扩展性为特点,适用于处理大量的非结构化数据。

特点:

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单。

附:数据存储形式(json)

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,常用于前后端数据传输和存储。它使用键值对的方式来表示数据,数据类型包括字符串、数字、布尔值、数组、对象等。

{"_id": ObjectId("5f8d5d7634f4a71e4c2e6a1a"),"name": "John Doe","age": 30,"email": "johndoe@example.com","address": {"street": "123 Main St","city": "New York","state": "NY","zip": "10001"},"interests": ["sports", "music", "reading"],"created_at": ISODate("2021-01-01T10:30:00Z")
}

在这个例子中,我们有一个名为"users"的集合,其中包含一个文档。文档有多个字段,包括_id、name、age、email、address、interests和created_at。

_id字段是一个唯一的主键,用于标识文档。它是一个ObjectId类型的值。

其他字段包含不同类型的数据。例如,name字段是一个字符串,age字段是一个整数,email字段是一个字符串,address字段是一个嵌入文档,interests字段是一个数组,created_at字段是一个日期。

附:json与python中的数据字典

在上述例子中,我们不难发现json的格式与数据字典高度相似,因为它们都采用了键值对的形式来表示数据。

以下是一些导致JSON格式和数据字典相似的原因:

  1. 键值对表示:JSON和数据字典都使用键值对的形式来表示数据。键用于标识字段或属性的名称,值则表示对应的数据。

  2. 嵌套结构:JSON和数据字典都支持嵌套结构,可以在一个字段的值中包含另一个键值对集合,形成层级结构。

  3. 多种数据类型:JSON和数据字典都支持多种数据类型,包括字符串、数字、布尔值、数组和嵌套对象等。

  4. 可读性:JSON和数据字典都以人类可读的格式表示数据,易于理解和解析。

主要存在的区别:

  1. 数据表示方式:JSON是一种数据交换格式,用于在不同系统之间传输和存储数据。它使用键值对的形式表示数据,并支持多种数据类型。数据字典是一种文档或定义,用于描述数据的结构和含义,通常用于数据建模、数据管理和文档化数据。

  2. 用途和背景:JSON主要用于数据交换和存储,特别是在Web应用程序之间传输数据。它是一种轻量级的格式,易于解析和处理。数据字典主要用于描述数据的结构、含义和元数据。它可以用于数据管理、数据文档化、数据查询等方面。

  3. 基于标准:JSON是一种开放标准,由ECMA国际组织(ECMA-404标准)和RFC 7159定义。它具有通用性和跨平台的优势。数据字典没有一个特定的标准,通常是由组织或个人定义的,可以根据需求进行定制和扩展。

  4. 应用范围:JSON广泛用于前后端数据传输、API交互、配置文件等领域。数据字典主要用于数据建模、数据管理、数据文档化等领域,通常与数据库和数据管理工具配合使用。

二、pymongo库

pymongo为python提供了丰富的操作mongodb数据库的方法,我们可以通过pymongo库中的函数方便地连接到mongodb数据库,并进行数据操作和查询。

安装 pymongo

pip install pymongo

三、连接到数据库

from pymongo import MongoClient# 连接到本地MongoDB服务器
client = MongoClient()# 连接到指定数据库
db = client.mydatabase# 连接到指定集合(相当于关系型数据库中的表)
collection = db.mycollection

四、数据操作与查询

在pymongo库中,用于进行数据操作和查询的一些常用函数包括:

  1. insert_one(): 插入一条数据到集合中。
  2. insert_many(): 插入多条数据到集合中。
  3. find_one(): 查询并返回集合中的第一条数据。
  4. find(): 查询并返回满足条件的所有数据。
  5. update_one(): 更新满足条件的第一条数据。
  6. update_many(): 更新满足条件的所有数据。
  7. delete_one(): 删除满足条件的第一条数据。
  8. delete_many(): 删除满足条件的所有数据。
  9. count_documents(): 统计满足条件的数据数量。
  10. distinct(): 返回满足条件的字段的去重值。
  11. aggregate(): 使用聚合管道进行数据处理和分析。
  12. create_index(): 创建索引以提高查询性能。
  13. drop_index(): 删除索引。
  14. list_indexes(): 列出集合中的所有索引。

示例:

import pymongo# 连接MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]# 插入一条数据
collection = db["customers"]
data = { "name": "John", "address": "Highway 37" }
inserted_data = collection.insert_one(data)
print(inserted_data.inserted_id)# 插入多条数据
data_list = [{ "name": "Amy", "address": "Apple st 652" },{ "name": "Hannah", "address": "Mountain 21" },{ "": "Michael", "address": "Valley 345" },
]
inserted_data = collection.insert_many(data_list)
print(inserted_data.inserted_ids)# 查询所有数据
results = collection.find()
for result in results:print(result)# 根据条件查询数据
query = { "address": "Mountain 21" }
results = collection.find(query)
for result in results:print(result)# 更新一条数据
query = { "address": "Mountain 21" }
new_data = { "$set": { "address": "Canyon 123" } }
collection.update_one(query, new_data)# 更新多条数据
query = { "address": { "$regex": "^S" } }
new_data = { "$set": { "name": "Minnie" } }
collection.update_many(query, new_data)# 删除一条数据
query = "address": "Highway 37" }
collection.delete_one(query)# 删除多条数据
query = { "address": { "$regex": "^S" } }
collection.delete_many(query```

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

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

相关文章

WSL安装异常:WslRegisterDistribution failed with error: 0xc03a001a

简介:如果文件夹右上角是否都有两个相对的蓝色箭头,在进行安装wsl时,设置就会抛出 Installing WslRegisterDistribution failed with error: 0xc03a001a的异常 历史攻略: 卸载WSL WSL:运行Linux文件 WSL&#xff1…

全志ARM926 Melis2.0系统的开发指引②

全志ARM926 Melis2.0系统的开发指引② 编写目的4. 编译工具链使用4.1.工具链通用配置4.2.模块的工具链配置4.3.简单的 makefile 5. 固件烧录工具的安装5.1.PhoenixSuit 的安装步骤5.2.检验 USB 驱动安装5.3.使用烧录软件 PhoenixSuit -全志相关工具和资源-.1 全志固件镜像修改工…

【Vue组件化编程】

Vue组件化编程 1 对组件的理解2 非单文件组件2.1 基本使用2.2 几个注意点2.3 组件的嵌套2.4 VueComponent构造函数2.5 一个重要的内置关系 3 单文件组件 1 对组件的理解 组件:实现应用中局部功能代码和资源的集合。优点:文件好维护;依赖关系不…

Scala第十六章节

Scala第十六章节 scala总目录 文档资料下载 章节目标 掌握泛型方法, 类, 特质的用法了解泛型上下界相关内容了解协变, 逆变, 非变的用法掌握列表去重排序案例 1. 泛型 泛型的意思是泛指某种具体的数据类型, 在Scala中, 泛型用[数据类型]表示. 在实际开发中, 泛型一般是结合…

vue重修004上部

文章目录 版权声明组件的三大组成部分scoped解决样式冲突scoped原理2.代码演示 组件data函数说明演示 组件通信组件关系分类通信解决方案父子通信流程子向父通信代 props详解props校验props&data、单向数据流 小黑记事本(组件版)基础组件结构需求和实…

【APUE】文件系统 — 类 du 命令功能实现

一、du命令解析 Summarize disk usage of the set of FILEs, recursively for directories. du 命令用于输出文件所占用的磁盘空间 默认情况下,它会输出当前目录下(包括该目录的所有子目录下)的所有文件的大小总和,以 1024B 为单…

基于SSM的餐厅点菜管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

NXP公司K60N512+PWM控制BLDC电机

本篇文章介绍了使用NXP公司提供的塔式快速原型系统来驱动控制带霍尔传感器的无刷直流电机。文章涉及的塔式快速原型系统主要包括以下四个独立板卡:1.塔式系统支撑模块(TWR-Elevator),用以连接微控制器以及周边模块;2.低…

ChatGPT必应联网功能正式上线

今日凌晨发现,ChatGPT又支持必应联网了!虽然有人使用过newbing这个阉割版的联网GPT4,但官方版本确实更加便捷好用啊! 尽管 ChatGPT 此前已经展现出了其他人工智能模型无可比拟的智能,但由于其训练数据的限制&#xff…

CUDA+cuDNN+TensorRT 配置避坑指南

深度学习模型加速部署的环境配置,需要在本地安装NVIDIA的一些工具链和软件包,这是一个些许繁琐的过程,而且一步错,步步错。笔者将会根据自己的经验来提供建议,减少踩坑几率。当然可以完全按照官方教程操作,…

xilinx的原语的使用

xilinx的原语的使用 在学习FPGA实现千兆网时需要GMII转RGMII,这就涉及了原语的使用,特此记录! 一、原语 与RGMII接口相关的原语: BUFG:全局时钟网络 BUFIO:只能采集IO的数据,采集IO数据的时候延时是最低的…

Ubantu 20.04 卸载与安装 MySQL 5.7 详细教程

文章目录 卸载 MySQL安装 MySQL 5.71.获取安装包2.解压并安装依赖包3.安装 MySQL4.启动 MySQL 扩展开启 gtid 与 binlog 卸载 MySQL 执行以下命令即可一键卸载,包括配置文件目录等。 # 安装sudo软件 apt-get install sudo -y # 卸载所有以"mysql-"开头的…

Raspberry Pi 5 新平台 新芯片组

Raspberry Pi 5 的 CPU 和 GPU 性能提高了两到三倍;内存和 I/O 带宽大约是两倍;并且是首款采用英国剑桥内部设计的芯片的 Raspberry Pi 计算机,4GB 型号的售价为 60 美元,8GB 版本的售价为 80 美元 主要特点包括: 2.4…

[架构之路-229]:计算机体硬件与系结构 - 计算机系统的矩阵知识体系结构

目录 一、纵向:目标系统的分层结构 1.1 目标系统的架构 1.2 网络协议栈 1.3 计算机程序语言分层 二、横向(构建目标系统的时间、开发阶段):软件工程 三、二维矩阵知识体系结构 一、纵向:目标系统的分层结构 1.1…

关于字符拼接

当然,以下是加入了幽默注释的代码和对应的逻辑树: # 提示用户输入input和txt内容,期待用户真有输入 input_text input("请输入input文本:") # 好了,快点输入吧 txt_text input("请输入txt文本&#…

软件工程第四周

模型建立的基本理念 模型是对现实世界复杂系统的简化和抽象,目的是为了更好地理解、分析和预测系统的行为。它能够真实反映研究对象的整体结构 or 某一侧面(功能、反应)的本质特征和变化规律。可以建立不同的子模型用于反应系统不同的侧面。同…

DP读书:《openEuler操作系统》(四)鲲鹏处理器

鲲鹏处理器 一、处理器概述1.Soc2.Chip3.DIE4.Cluster5.Core 二、体系架构1.计算子系统2.存储子系统3.其他子系统 三、CPU编程模型1.中断与异常2.异常级别a.基本概念b.异常级别切换 下面为整理的内容:鲲鹏处理器 架构与编程(一)处理器与服务器…

Leetcode290. 单词规律

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 解题思路:哈希 力扣(LeetCode&…

MIT 6.S081学习笔记(第二章)

〇、前言 本文主要完成MIT 6.S081 实验二:system call 一、Using gdb (easy) Question requirements In many cases, print statements will be sufficient to debug your kernel, but sometimes being able to single step through some assembly code or inspe…

【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )

文章目录 一、一元运算符重载1、使用 成员函数 实现 前置 自增运算符重载2、使用 成员函数 实现 前置 - - 自减运算符重载 二、完整代码示例 一、一元运算符重载 1、使用 成员函数 实现 前置 自增运算符重载 使用 全局函数 实现 前置 自增运算符重载 : 首先 , 写出函数名 ,…