mongdb学习与使用

news/2024/7/7 20:45:29 标签: 学习

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'])


http://www.niftyadmin.cn/n/5535281.html

相关文章

Echarts折线+柱状图的多y轴

实现效果&#xff1a; 代码&#xff1a; <template><div class"test-echart"><div id"barLineChart" ref"barLineChart" :style"barLineStyle"></div></div> </template> <script> // imp…

Hutool构建树结构

引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version> </dependency>测试 SpringBootTest public class HutoolTest {private List<Menu> me…

VIM介绍

VIM&#xff08;Vi IMproved&#xff09;是一种高度可配置的文本编辑器&#xff0c;用于有效地创建和更改任何类型的文本。它是从 vi 编辑器发展而来的&#xff0c;后者最初是 UNIX 系统上的一个文本编辑器。VIM 以其键盘驱动的界面和强大的文本处理能力而闻名&#xff0c;是许…

在Linux上部署和管理OpenStack云平台

部署和管理OpenStack云平台在Linux上是一个相当复杂的任务&#xff0c;涉及到多个组件和服务的配置和集成。下面是一个简化的步骤概述&#xff0c;用于在Linux上部署和管理OpenStack云平台&#xff1a; 1. 环境准备: • 确保你有足够数量的服务器作为控制节点、计算节点、网络…

鸿蒙 HarmonyOs 动画效果 快速入门

一、理论 1.1 animation属性 名称参数类型必填描述durationnumber否设置动画时长&#xff0c;默认值&#xff1a;1000&#xff0c;单位&#xff1a;毫秒temponumber否动画播放速度。数值越大&#xff0c;速度越快&#xff0c;默认为1curvestring | Curve否 设置动画曲线。 默…

【SQL】索引过多的缺点

索引并不是建得越多越好。虽然索引可以提高查询性能&#xff0c;但它们也带来了一些负面影响&#xff0c;特别是在数据修改操作&#xff08;插入、更新、删除&#xff09;和存储空间方面。以下是一些需要考虑的因素和权衡&#xff1a; 1. 写操作的性能影响 每个索引在数据修改…

Redis基础教程(四):redis键(key)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

cpu,缓存,辅存,主存之间的关系及特点

关系图 示意图&#xff1a; ------------------- | CPU | | ------------- | | | 寄存器 | | | ------------- | | | L1缓存 | | | ------------- | | | L2缓存 | | | ------------- | | | L3缓存 | | | ------------- | ----…