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_page

        result = {
            "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'])

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++必修:深入理解继承与虚继承

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. 继承的概念与定义 1.1. 继承的概念 继承(inheritance)机制是面向对象程序设计…

每日一题——Python实现PAT乙级1018 锤子剪刀布(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码结构与逻辑 时间复杂度分析 空间复杂度分析 代码优化建议 总结 我…

【java计算机毕设】美容院管理系统 项目源代码MySQL springboot vue html maven+文档 前后端可分离也可不分离

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】美容院管理系统 项目源代码MySQL springboot vue html maven文档 前后端可分离也可不分离 2项目介绍 系统功能: 美容院管理系统包括管理员、用户俩种角色。 管理员功能包括个人中心模块用于修改…

“论单元测试方法及应用”精选范文,软考高级论文,系统架构设计师论文

论文真题 1、概要叙述你参与管理和开发的软件项目,以吸你所担的主要工作。 2、结给你参与管理和开发的软件项目,简要叙述单元测试中静态测试和动态测试方法的基本内容。 3、结给你惨与管理和研发的软件项目,体阐述在玩测试过程中,如何确定白盒测试的覆盖标准,及如…

【C语言】sizeof 关键字

在C语言中,sizeof运算符用于计算数据类型或变量的大小(以字节为单位)。sizeof是一个编译时运算符,它在编译阶段确定类型或变量的大小,而不是在运行时。 基本用法 sizeof可以用于计算基本数据类型、数组、结构体以及指…

银湖资本与UIBE达成战略合作,共同推动股权投资领域发展

近日,全球知名私募股权投资公司银湖资本(Silver Lake Partners)宣布与对外经济贸易大学(UIBE)校友发起的“UIBE阿波罗股权投资俱乐部”达成战略合作协议。此举不仅标志着双方在股权投资领域的深度合作,也为…

LVS-DR负载均衡

LVS-DR负载均衡 LVS—DR工作模式 原理 客户端访问调度器的VIP地址,在路由器上应该设置VIP跟调度器的一对一的映射关系,调度器根据调度算法将该请求“调度“到后端真实服务器,真实服务器处理完毕后直接将处理后的应答报文发送给路由器&#xf…

使用 draw.io 画图

尽管我非常喜欢 wps 和 office 的 ppt 画图,但因为它们对数学公式的糟糕支持,我不得不另外寻找一个画图工具。当然我也同样很喜欢 visio ,但同样的,它对数学公式的支持糟糕,另外,最为重要的是,v…

不同的llm推理框架

vLLM适用于大批量Prompt输入,并对推理速度要求比较高的场景。 实际应用场景中,TensorRT-LLM通常与Triton Inference Server结合起来使用,NVIDIA官方能够提供更适合NVIDIA GPU运行的高效Kernel。 LightLLM比较轻量、易于扩展、易于上手&…

Android 抓取 CPU 资源信息

在 Android 开发中,使用 ADB(Android Debug Bridge)命令获取 CPU 资源信息有很多重要的作用。这些命令可以帮助开发者在多种情况下分析和优化应用性能、解决问题以及进行系统性调试。 以下列举一些 ABD 获取 CPU 资源信息的命令 获取 CPU 核…

农作物生长环境的远程监控与智能调控

农作物生长环境的远程监控与智能调控 农作物生长环境的远程监控与智能调控技术,作为现代农业科技的核心组成部分,正逐步革新传统农业的生产模式,推动农业向精准化、智能化转型。这一技术体系综合应用了物联网、大数据、云计算以及人工智能等…

C语言实战 | Flappy Bird游戏

Flappy Bird游戏是由一名越南游戏制作者独自开发的,曾经风靡全球。游戏规则非常简单,玩家必须控制一只小鸟,跨越由各种长度的水管所组成的障碍物,如果撞上管道游戏就结束,如图11.11所示。 ■ 图11.11Flappy Bird 游戏 …

启明智显Model3A芯片方案7寸高清触摸屏ZX7D00CM21S:开箱、设置与实操全攻略指南

一、背景 本指南将详细介绍启明智显的Model3A芯片方案下的7寸高清触摸屏ZX7D00CM21S的开箱步骤、基础设置以及实操应用。无论您是电子爱好者、开发者还是工程师,这份指南都能助您快速上手并充分利用这款触摸屏的各项功能。 二、硬件介绍 ZX7D00CM21S 7寸高清触摸屏是…

不知几DAY的Symfony---RCE复现

感谢红队大佬老流氓的供稿,此篇文章是针对Symfony框架的一个RCE漏洞复现 ​框架简介 Symfony是一个开源的PHP Web框架,它现在是许多知名 CMS 的核心组件,例如Drupal、Joomla!、eZPlatform(以前称为 eZPublish)或Bolt。…

7、Qt5开发及实列(笔记2)

文章目录 1、mainwindow.c2、mainwindow.h 说明&#xff1a;此示例包含了基本的常使用的基本小部件 效果如下 1、mainwindow.c #include "mainwindow.h" #include <QApplication>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {widgetInit()…

深度Q网络(DQN)算法技术博客

深度Q网络&#xff08;DQN&#xff09;是一种将深度学习与强化学习相结合的算法&#xff0c;用于解决高维状态空间的强化学习问题。本文将详细介绍DQN算法的基本原理&#xff0c;关键公式以及具体的代码实现。 一、DQN算法的基本原理 DQN算法是Q学习的一种扩展&#xff0c;利…

小程序 npm 支持

使用 npm 包 目前小程序已经支持使用 npm 安装第三方包&#xff0c;因为 node_modules 目录中的包不会参与小程序项目的编译、 上传和打包&#xff0c;因此在小程序 项目中要使用的 npm 包&#xff0c;必须走一遍构建 npm 的过程。在构建成功以后&#xff0c;默认 会在小程序目…

Python面向对象编程中的继承及其应用

目录 1. 继承的基本概念 2. 继承的语法 3. 继承的应用场景 4. 使用示例&#xff1a;汽车销售系统 5. 总结 继承是面向对象编程中的一个重要概念&#xff0c;它允许我们根据已有类创建新类&#xff0c;并继承已有类的属性和方法。在本文中&#xff0c;我们将学习Python中的…

向量数据库、主键存储引擎、高速网络 RDMA 框架……DolphinDB 版本更新啦!

盛夏已至&#xff0c;炎热的七月伊始&#xff0c;DolphinDB 也迎来了版本的更新。此次更新的 3.00.1 与 2.00.13 版本从多个维度进行了优化扩展&#xff0c;进一步深化了 DolphinDB 在机器学习、数据分析等领域的尝试与探索。 为了响应用户日益增长的 AI 运算需求&#xff0c;…

Java基础:爬虫

1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.…