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.mzph.cn/diannao/40376.shtml

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

相关文章

国产强大免费WAF, 社区版雷池动态防护介绍

雷池WAF,基于智能语义分析的下一代 Web 应用防火墙 使用情况 我司于2023年4月23日对雷池进行测试,测试一个月后,于2023年5月24日对雷池进行正式切换,此时版本为1.5.1。 里程碑纪念 后续一直跟随雷池进行版本升级,当前…

QT_GUI

1、QT安装 一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI)应用程序以及命令行工具。QT有商业版额免费开源版,一般使用免费开源版即可,下面安装的是QT5,因为出来较早,使用较多&…

Python特征工程 — 1.4 特征归一化方法详解

目录 1 Min-Max归一化 方法1:自定义的Min-Max归一化封装函数 方法2: scikit-learn库中的MinMaxScaler 2 Z-score归一化 方法1:自定义的Z-score归一化封装函数 方法2: scikit-learn库中的StandardScaler 3 最大值归一化 4 L…

考研生活day1--王道课后习题2.2.1、2.2.2、2.2.3

2.2.1 题目描述: 解题思路: 这是最基础的操作,思路大家应该都有,缺少的应该是如何下笔,很多同学都是有思路但是不知道如何下笔,这时候看思路的意义不大,可以直接看答案怎么写,最好…

Java项目:基于SSM框架实现的游戏攻略网站系统分前后台【ssm+B/S架构+源码+数据库+毕业论文+任务书】

一、项目简介 本项目是一套基于SSM框架实现的游戏攻略网站系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能…

redhat7.x 升级openssh至openssh-9.8p1

1.环境准备: OS系统:redhat 7.4 2.备份配置文件: cp -rf /etc/ssh /etc/ssh.bak cp -rf /usr/bin/openssl /usr/bin/openssl.bak cp -rf /etc/pam.d /etc/pam.d.bak cp -rf /usr/lib/systemd/system /usr/lib/systemd/system.bak 3.安装…

UB9A0全系统全频高精度板卡性能指标

UB9A0 板卡是基于和芯星通自主研发的新一代射频基带及高精度算法一体化 GNSS SoC 芯片—Nebulas Ⅳ开发的全系统全频点高精 OEM 板卡 ,支持 BDS,GPS, GLONASS,Galileo,QZSS,NavIC,SBAS&#xff…

MySQL环境搭配

下载版本37滴 下载第二个 之后进行安装 进入安装界面 next 选择默认的 进行下一步 安装成功后,进行一系列配置,成功界面如下: 配置 MySQL8.0 环境变量 如果不配置 MySQL 环境变量,就不能在命令行直接输入 MySQL 登录命令。 步…

强烈推荐!12 组超惊艳的 Midjourney 风格提示词!

前言 Midjourney 的 --sref random 随机风格功能推出之后,出现了很多对不同代码生成效果的探索。今天就为大家推荐 12 组我觉得非常惊艳的风格代码,将它们添加在提示词中,不需要写复杂的关键词就能得到高质量的指定风格,并且效果…

CUDA编译配置中来自 CUDA 12.1.targets 的MSB3721错误和核函数调用语法错误‘<’解决及可用的代码示例框架

今天开始整cuda编程处理图像,好久没玩cuda,又从小白开始。情况不妙,第一个工程坑不少,记录一下如下2个重要的错误: (1)来自 CUDA 12.1.targets 的MSB3721错误 错误 命令““C:\Program Files\N…

Scrapy框架的基本使用教程

1、创建scrapy项目 首先在自己的跟目录文件下执行命令: PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallatorscrapy startproject 项目名 具体执行操作如下:1、创建项目目录:Scrapy会在当前工作目录下创建一…

Git 操作总结

1. 安装、Git 环境配置 1.1 安装 Git 官方版本可以在 Git 官方网站下载:打开 https://git-scm.com/download/win,选择相应版本即可。 Git 安装完成后,可以在开始菜单中看到 Git 的三个启动图标(Git Bash、Git CMD、Git GUI&…

QT5.12环境搭建与源码编译

一、概述 QT版本:QT5.12.10 Qt网址:http://download.qt.io/archive/qt/ 编译平台 ubuntu18.04 二、安装交叉编译工具链 1、获取交叉编译工具链 一般如果是编译系统如果有对应的gcc 就是用这个就可以了 比如rk3128 lin…

字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析

在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它&#…

如何为老化的汽车铅酸电池充电

一项小研究表明,汽车铅酸电池不同于深循环或固定电池。汽车电池旨在限度地提高启动电流容量,并且对深度放电或浮充(也称为第 3 阶段充电循环)反应不佳。起动电池的极板结构使表面积化,并且电解液比重 (SG) 高于其他电池,以提供高启…

C# 实现位比较操作

1、目标 对两个字节进行比较,统计变化位数、一位发生变化的位数、二位发生变化的位数、多位发生变化的位数。 2、代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin…

O2OA(翱途) 开发平台之HTTP端口规划

O2OA(翱途) 开发平台[下称O2OA开发平台或者O2OA]采用相对灵活的系统架构,支持三种服务器运行的方式。本篇主要阐述合并服务运行独立服务运行代理端口运行三种服务器运行方式。 一、先决条件: 1、O2Server服务器正常运行,系统安装部署请参考文…

Vue84-Vuex的工作原理与搭建开发环境

一、vuex工作原理 stats:是一个object对象,里面有很多key-value,存放的就是要操作的数据。mutations:是一个object对象,真正去操作stats的人。actions的作用:是一个object对象,当一个动作对应的…

【Spring Boot】关系映射开发(一):一对一映射

关系映射开发(一):一对一映射 1.认识实体间关系映射1.1 映射方向1.2 ORM 映射类型 2.实现 “一对一” 映射2.1 编写实体2.1.1 新建 Student 实体2.1.2 新建 Card 实体 2.2 编写 Repository 层2.2.1 编写 Student 实体的 Repository2.2.2 编写…

从涟漪到波浪:资产代币化的变革力量

原文标题:《From ripples to waves: The transformational power of tokenizing assets》撰文:Anutosh Banerjee,Matt Higginson,Julian Sevillano,Matt Higginson编译:Chris,Techub News本文来…