mongdb学习与使用

1. 基础概念

  • MongoDB简介:

    • MongoDB是一个基于文档的NoSQL数据库,具有高性能、高可用性和易扩展性。
    • 数据存储在类似JSON的BSON格式中。
  • 基本术语:

    • Database(数据库): 集合的容器。
    • Collection(集合): 文档的容器,类似于关系型数据库中的表。
    • Document(文档): 数据的基本单元,类似于关系型数据库中的行。

2. 安装与设置

  • 安装MongoDB:

    • 官方安装指南
  • 启动MongoDB服务:

    • Windows: mongod
    • Mac/Linux: sudo service mongod start
  • MongoDB Shell:

    • 连接MongoDB实例:mongo

3. 基本操作

  • 选择数据库:use share  选中share的数据库

  • 创建集合  db.createCollection("news") 创建一个名字为news的集合

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  • 插入数据(文档)   db.news.insertOne({ name: "Alice", age: 25, city: "New York" }) 像news这个集合中插入一条数据

  • 查询文档:

  • 查所有

  • db.news.find() 查找所有的文档

  • 带条件

  • db.news.find({ age: 25 })  带条件查找 查询年龄为25的这一条数据

  • db.news.find({ age: { $gt: 20 }) 查询年龄大于20岁的

  • db.news.find({age:{$gt:20}},{name:1,age:1,_id:0})  查询年龄>20,且返回name,age字段,不返回_id字段

  • 排序

  • db.news.find().sort({age:-1})  按照年龄降序排序

  • db.news.find().sort({age:1})  按照年龄升序​​​​​​

  • 分页

  • 跳过指定数量的文档

    db.news.find().skip(10)

  • 限制返回的文档数量

    db.news.find().limit(5)

  • 分页查询

    db.news.find().skip(10).limit(5)

  • 逻辑操作符

    • $and:与

      db.news.find({ $and: [ { age: { $gt: 20 } }, { age: { $lt: 30 } } ] }) 查询大于二十小于三十

    • $or:或

    • db.news.find({ $or: [ { age: 25 }, { age: 30 } ] })

    • 查询年龄是25跟30的那两条

    • $not:非

      db.myCollection.find({ age: { $not: { $gt: 20 } } })

  • 数组操作符

    • $in:在指定数组中

      db.news.find({ age: { $in: [25, 30, 35] } })

    • $nin:不在指定数组中

      db.news.find({ age: { $nin: [20, 25, 30] } })

    • $all:包含数组中的所有元素

      db.news.find({ tags: { $all: ["red", "blue"] } })

  • 更新文档 

  • db.news.updateOne({ name: "Alice" }, { $set: { age: 26 } }) 更新语句用于在 news集合中查找 name 字段值为 "Alice" 的文档,并将其 age 字段更新为 26。如果文档中没有 age 字段,则会添加这个字段。

  • 删除文档

  • db.news.deleteOne({ name: "Alice" }) 删除所有 name 字段为Alice的文档

4.Python整合mongdb

1.安装pymongdb

pip install pymongdb

2.连接

from mongdb import MongClient

client =MongClient("localhost", 27017)

db = client['mydatabase']  选择名为mydatabase的数据库,没有则自动创建

# 选择集合(如果集合不存在,MongoDB会自动创建)  
collection = db['mycollection']

3.就是做一些业务操作了,增删改,这举出一个分页查询的代码

@bp.route('/list', methods=['GET'])
def list_documents():try:# 获取分页参数page = int(request.args.get('page', 1))per_page = int(request.args.get('per_page', 40))# 计算跳过的记录数量skip = (page - 1) * per_page# 获取集合with get_mongo_db() as m_db:collection = m_db.information# 查询文档并排序pipeline = [{"$sort": {"publish_date": -1}},{"$skip": skip},{"$limit": per_page},{"$project": {"full_title": 1,"report_type": 1,"publish_date": 1,"researcher": 1,"detail_link": 1,"_id": {"$toString": "$_id"}}}]documents = collection.aggregate(pipeline)# 将查询结果转换为列表documents_list = list(documents)# 获取总记录数total_documents = collection.count_documents({})# 计算总页数total_pages = (total_documents + per_page - 1) // per_pageresult = {"documents": documents_list,"page": page,"per_page": per_page,"total_pages": total_pages,"total_documents": total_documents}return Success(message="查询列表成功", result=result)except Exception as e:logger.error(e)return Fail('查询失败')

然后这里普及一下我踩的坑吧,

1.在插入数据的时候,会自动生成一个_id的对象,这是mongdb自动生成,且是唯一的,如果你

from bson  improt Objectid

Objectid(id)

利用这个把前端传的字符串id对象转为Objectid,这样才好去查询

如果是返回的话,直接下面这样操作

document['_id'] = str(document['_id'])

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

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

相关文章

25.labview数据采集中的读取和写入文本文件和Excel表格文件

①本文将会讲解labview读取和写入文本文件和Excel文件的几种不同方式,讲解程序的基本原理,并提出具体的实施方案,本文内容如下所示。 ②本文文章结束会提供大家 文本和表格读取写入的源程序 ,以便于大家学习和使用。 本文中可能用…

Linux Rsyslog+LogAnalyzer+MariaDB部署日志服务器

文章目录 Linux RsyslogLogAnalyzerMariaDB部署日志服务器1 环境准备1.1 服务器端安装LAMP环境1.2 服务启动并加入开机启动1.2.1 Apache1.2.2 MariaDB1.2.3 Php 2 Rsyslog服务端安装及配置2.1 安装Rsyslog及Rsyslog连接MySQL的模块2.2 导入rsyslog-mysql数据库文件2.3 查看刚导…

艾体宝干货 | IOTA流量分析秘籍第二招:IDS或终端保护系统分析

终端保护解决方案或入侵检测系统(IDS)可以基于启发式方法、特征码以及新解决方案中的人工智能来检测恶意事件。它们通过电子邮件、Syslog、Webhooks或其他方式生成警报。然而,有效地分析这些警报消息的根本原因,以识别和响应潜在威…

数学建模(1):期末大乱炖

1 概述!! 1.1 原型和模型 原型:客观存在的研究对象称为原型,也称为“系统”、“过程”。 机械系统、电力系统、化学反应过程、生产销售过程等都是原型; 研究原型的结构和原理, 从而进行优化、预测、评价…

【Android源码】Gerrit安装

前言 如果你打开 https://android.googlesource.com/platform/manifest,就会发现,google官方管理Android源码,使用的是Gerrit。Android系统源码是非常大的,用Git肯定是不适合。对于大型项目,得用Gerrit,今…

解决微信小程序使用textarea输入框 type=“textarea“ 文本输入限制问题

出现的问题 type"textarea" 这个限制 微信小程序使用textarea , 输入字数大于140 时就输入不进去了 加入这个就解决了 maxlength"-1" <u-inputv-model"queryParams.orderIdTxt"border"true":focus"true":auto-height&q…

c++:动态内存变量

典型的C面向对象编程 元素 (1)头文件hpp中类的定义 (2)源文件cpp中类的实现&#xff08;构造函数、析构函数、方法&#xff09; (3)主程序 案例 (1)用C来编程“人一天的生活” (2)“人”的属性&#xff1a;name、age、male (3)“人”的方法&#xff1a;eat、work(coding/shop…

【虚拟机】虚拟机网络无法访问问题【已解决】

【虚拟机】虚拟机无法上网问题【已解决】 问题探究解决方法法1&#xff1a;查看相关“网络服务”是否处于正常启动状态法2&#xff1a;重启网络法3&#xff1a;重新安装VMWare法4&#xff1a;使用NAT模式&#xff0c;每次打开win7都没连上网的解决办法 问题探究 安装了很多个虚…

香橙派 AIpro 根据心情生成专属音乐

香橙派 AIpro 根据心情生成专属音乐 一、OrangePi AI pro 开发版参数介绍1.1 接口简介1.2 OrangePi AI pro 的Linux系统功能适配情况1.3 开发板开机1.4 远程连接到 OrangePi AIpro 二、开发环境搭建2.1 创建环境、代码部署文件夹2.2 安装 miniconda2.3 为 miniconda 更新国内源…

分子AI预测赛笔记

#AI夏令营 #Datawhale #夏令营 Taks1 跑通baseline 根据task1跑通baseline 注册账号 直接注册或登录百度账号&#xff0c;etc fork 项目 零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 启动项目 选择运行环境&#xff0c;并点击确定&#xff0c;没…

Redis的八种数据类型介绍

Redis 是一个高性能的键值存储&#xff0c;它支持多种丰富的数据类型。每种数据类型都有其特定的用途和底层实现。下面我将介绍 Redis 支持的主要数据类型及其背后的数据结构。 本人这里还有几篇详细的Redis用法文章&#xff0c;可以用来进阶康康&#xff01; 1. 字符串 (Stri…

轻松跨越国界:使用WildCard畅享全球AI服务

大家好&#xff0c;现在AI技术已经深入到我们的日常生活中。然而&#xff0c;许多朋友仍然难以获取优质的AI工具和应用。那么&#xff0c;如何才能使用像ChatGPT这样的AI服务呢&#xff1f; 今天我为大家介绍一个“一劳永逸”的解决方案&#xff0c;它就是我们的主角——WildC…

基于antv x6实现的组织架构图

X6 是基于 HTML 和 SVG 的图编辑引擎&#xff0c;基于 MVC 架构&#xff0c;用户更加专注于数据逻辑和业务逻辑。 一、业务背景 将组织树形结构图形化&#xff0c;更直观的展示个人所在的组织架构。 二、功能点 组织结构按需渲染&#xff0c;支持层级展开、收缩按需求自定义…

秋招突击——设计模式补充——单例模式、依赖倒转原则、工厂方法模式

文章目录 引言正文依赖倒转原则工厂方法模式工厂模式的实现简单工厂和工厂方法的对比 抽线工厂模式最基本的数据访问程序使用工厂模式实现数据库的访问使用抽象工厂模式的数据访问程序抽象工厂模式的优点和缺点使用反射抽象工厂的数据访问程序使用反射配置文件实现数据访问程序…

PhysioLLM 个性化健康洞察:手表可穿戴设备实时数据 + 大模型

个性化健康洞察&#xff1a;可穿戴设备实时数据 大模型 提出背景PhysioLLM 图PhysioLLM 实现数据准备用户模型和洞察生成个性化数据总结和洞察是如何生成的&#xff1f; 解析分析 提出背景 论文&#xff1a;https://arxiv.org/pdf/2406.19283 虽然当前的可穿戴设备伴随应用&…

S272钡铼技术4G无线RTU支持多路DIN输入和模拟量转换至4G网络

钡铼第四代RTU S272是一款先进的工业级4G远程遥测终端&#xff0c;为各种远程工业数据采集和控制系统提供了高效解决方案。结合了现代通信技术和多功能的输入输出接口&#xff0c;S272不仅支持多路数字量和模拟量输入&#xff0c;还具备灵活的扩展性和强大的控制功能&#xff0…

什么是嵌入式,单片机又是什么,两者有什么关联又有什么区别?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;从科普的角度&#xff0c;…

Python酷库之旅-第三方库Pandas(001)

目录 一、Pandas库的由来 1、背景与起源 1-1、开发背景 1-2、起源时间 2、名称由来 3、发展历程 4、功能与特点 4-1、数据结构 4-2、数据处理能力 5、影响与地位 5-1、数据分析“三剑客”之一 5-2、社区支持 二、Pandas库的应用场景 1、数据分析 2、数据清洗 3…

记录OSPF配置,建立邻居失败的过程

1.配置完ospf后&#xff0c;在路由表中不出现ospf相关信息 [SW2]ospf [SW2-ospf-1]are [SW2-ospf-1]area 0 [SW2-ospf-1-area-0.0.0.0]net [SW2-ospf-1-area-0.0.0.0]network 0.0.0.0 Jul 4 2024 22:11:58-08:00 SW2 DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5.25 .1…

二分查找及其变种

一、概念 二分查找算法&#xff08;Binary Search Algorithm&#xff09;是一种在有序数组中查找特定元素的高效搜索方法。 其基本思想是将目标值与数组中间的元素进行比较&#xff0c;如果目标值等于中间元素&#xff0c;则查找成功&#xff1b;如果目标值小于中间元素&…