MongoDB 查询方法与高级查询表(Python版)

目录

一、MongoDB3步快速安装

1.1​下载安装包

1.2运行安装程序​

1.3​验证安装​打开CMD执行:

1.4 基本查询操作

二、高级查询操作符表

2.1 比较操作符

2.2 逻辑操作符

2.3 元素操作符

2.4 数组操作符

三、高级查询案例

3.1 复杂条件组合

3.2 数组查询

3.3 嵌套文档查询

四、聚合查询方法

4.1 聚合管道操作符表

4.2 聚合表达式表

4.3 聚合查询案例

五、性能优化技巧


一、MongoDB3步快速安装

1.1​下载安装包


访问官网下载社区版:https://www.mongodb.com/try/download/community
选择:Windows系统 → .msi格式 → 最新稳定版

1.2运行安装程序
  • 双击下载的.msi文件
  • 选择"Complete"完整安装
  • 勾选"Install MongoDB as a Service"(默认数据目录:C:\data\db
  • 安装图形工具Compass(推荐勾选)
1.3​验证安装
打开CMD执行:
mongod --version  # 查看版本
mongo            # 连接数据库
1.4 基本查询操作
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['sample_db']
collection = db['products']# 1. 查询所有文档
all_products = list(collection.find())
print(f"所有产品数量: {len(all_products)}")# 2. 条件查询
cheap_products = list(collection.find({"price": {"$lt": 100}}))
print(f"价格低于100的产品: {len(cheap_products)}个")# 3. 投影查询(只返回指定字段)
product_names = list(collection.find({"category": "电子产品"}, {"_id": 0, "name": 1, "price": 1}
))
print("电子产品列表:")
for p in product_names:print(f"- {p['name']}: ¥{p['price']}")

运行结果:​

所有产品数量: 15
价格低于100的产品: 5个
电子产品列表:
- 无线耳机: ¥299
- 机械键盘: ¥499

二、高级查询操作符表

2.1 比较操作符

操作符描述示例(Python代码)等效SQL
$eq等于find({"price": {"$eq": 299}})WHERE price = 299
$ne不等于find({"category": {"$ne": "图书"}})WHERE category <> '图书'
$gt大于find({"price": {"$gt": 500}})WHERE price > 500
$gte大于等于find({"rating": {"$gte": 4}})WHERE rating >= 4
$lt小于find({"stock": {"$lt": 10}})WHERE stock < 10
$lte小于等于find({"age": {"$lte": 30}})WHERE age <= 30
$in在数组中find({"category": {"$in": ["电子产品","图书"]}})WHERE category IN ('电子产品','图书')
$nin不在数组中find({"status": {"$nin": ["下架","缺货"]}})WHERE status NOT IN ('下架','缺货')

2.2 逻辑操作符

操作符描述示例(Python代码)等效SQL
$and与逻辑find({"$and": [{"price": {"$gt": 100}}, {"price": {"$lt": 500}}]})WHERE price > 100 AND price < 500
$or或逻辑find({"$or": [{"category": "电子产品"}, {"stock": 0}]})WHERE category = '电子产品' OR stock = 0
$not非逻辑find({"price": {"$not": {"$gt": 100}}})WHERE NOT price > 100
$nor或非逻辑find({"$nor": [{"price": {"$gt": 500}}, {"rating": {"$lt": 3}}]})WHERE NOT (price > 500 OR rating < 3)

2.3 元素操作符

操作符描述示例(Python代码)等效SQL
$exists字段是否存在find({"discount": {"$exists": True}})WHERE discount IS NOT NULL
$type字段类型检查find({"price": {"$type": "decimal"}})-
$mod取模运算find({"age": {"$mod": [5, 0]}})WHERE age % 5 = 0

2.4 数组操作符

操作符描述示例(Python代码)等效SQL
$all包含所有指定元素find({"tags": {"$all": ["热门","促销"]}})-
$elemMatch匹配数组中的元素find({"reviews": {"$elemMatch": {"rating": 5}}})-
$size数组大小find({"tags": {"$size": 3}})WHERE array_length(tags, 1) = 3
$定位操作符update({"items.id": 1}, {"$set": {"items.$.qty": 2}})-

三、高级查询案例

3.1 复杂条件组合

# 查询价格在100-500之间,且库存大于10的电子产品或评分≥4的图书
query = {"$and": [{"price": {"$gte": 100, "$lte": 500}},{"$or": [{"$and": [{"category": "电子产品"},{"stock": {"$gt": 10}}]},{"$and": [{"category": "图书"},{"rating": {"$gte": 4}}]}]}]
}results = list(collection.find(query))
print(f"找到 {len(results)} 个符合条件的商品")

运行结果:​

找到 3 个符合条件的商品

3.2 数组查询

# 查询包含"促销"标签且标签数量为2的商品
array_query = {"tags": {"$all": ["促销"],"$size": 2}
}promo_items = list(collection.find(array_query))
print("促销商品:")
for item in promo_items:print(f"- {item['name']} (标签: {', '.join(item['tags'])})")

运行结果:​

促销商品:
- 无线耳机 (标签: 促销, 新品)
- Python编程书 (标签: 促销, 畅销)

3.3 嵌套文档查询

# 查询特定规格的产品
spec_query = {"specs": {"$elemMatch": {"type": "颜色","value": "黑色"}}
}black_products = list(collection.find(spec_query))
print("黑色款产品:")
for p in black_products:print(f"- {p['name']}")

运行结果:​

黑色款产品:
- 无线耳机
- 机械键盘

四、聚合查询方法

4.1 聚合管道操作符表

阶段描述示例(Python代码)
$match过滤文档{"$match": {"category": "电子产品"}}
$project选择/计算字段{"$project": {"name": 1, "profit": {"$subtract": ["$price", "$cost"]}}}
$group分组计算{"$group": {"_id": "$category", "avgPrice": {"$avg": "$price"}}}
$sort排序{"$sort": {"price": -1}}
$limit限制结果数量{"$limit": 5}
$skip跳过指定数量文档{"$skip": 10}
$unwind展开数组{"$unwind": "$tags"}
$lookup关联查询{"$lookup": {"from": "inventory", "localField": "sku", "foreignField": "sku", "as": "inventory"}}

4.2 聚合表达式表

表达式描述示例
$sum求和{"$sum": "$quantity"}
$avg平均值{"$avg": "$price"}
$max最大值{"$max": "$score"}
$min最小值{"$min": "$age"}
$push添加值到数组{"$push": "$name"}
$addToSet添加唯一值到数组{"$addToSet": "$tags"}
$first获取分组第一个文档的值{"$first": "$created_at"}
$last获取分组最后一个文档的值{"$last": "$updated_at"}

4.3 聚合查询案例

# 按类别统计:平均价格、最高价格、库存总量
pipeline = [{"$group": {"_id": "$category","avgPrice": {"$avg": "$price"},"maxPrice": {"$max": "$price"},"totalStock": {"$sum": "$stock"},"products": {"$push": "$name"}}},{"$sort": {"avgPrice": -1}},{"$project": {"category": "$_id","avgPrice": {"$round": ["$avgPrice", 2]},"maxPrice": 1,"totalStock": 1,"productCount": {"$size": "$products"},"_id": 0}}
]print("\n商品分类统计:")
for stat in collection.aggregate(pipeline):print(f"\n{stat['category']}:")print(f"  平均价格: ¥{stat['avgPrice']}")print(f"  最高价格: ¥{stat['maxPrice']}")print(f"  总库存量: {stat['totalStock']}")print(f"  商品数量: {stat['productCount']}")

运行结果:​

商品分类统计:电子产品:平均价格: ¥399.0最高价格: ¥499总库存量: 150商品数量: 2图书:平均价格: ¥89.0最高价格: ¥89总库存量: 200商品数量: 1

五、性能优化技巧

  1. 索引使用建议​:

    # 创建复合索引
    collection.create_index([("category", 1), ("price", -1)])# 查看查询执行计划
    print(collection.find({"category": "电子产品"}).explain())
  2. 查询优化方法​:

    • 使用投影限制返回字段
    • 避免使用 $where 和 JavaScript 表达式
    • 对大型结果集使用批量处理
    • 合理设置 batch_size
  3. 分页查询优化​:

    # 高效分页查询
    def get_products(page=1, per_page=10):skip = (page - 1) * per_pagereturn list(collection.find().sort("_id", 1).skip(skip).limit(per_page))

本教程涵盖了MongoDB从基础到高级的查询方法,所有示例均使用Python语言实现,可直接在PyCharm中运行。建议收藏本查询表作为日常开发的快速参考。

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

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

相关文章

选型指南:如何为企业挑选合适的边缘计算网关

选型指南&#xff1a;如何为企业挑选合适的边缘计算网关在企业迈向智能化转型的道路上&#xff0c;选择一款合适的物联网边缘计算网关至关重要。面对众多型号和功能各异的网关产品&#xff0c;企业该如何做出正确抉择呢&#xff1f;​首先要考虑的是网关的兼容性。蓝蜂物联网边…

HT8693 音频功率放大器:赋能优质音频体验的核心之选

在音频设备快速迭代的当下&#xff0c;用户对音质表现、设备稳定性和场景适应性的需求日益提升&#xff0c;一款性能卓越的音频功率放大器成为连接音源与听觉享受的关键桥梁。HT8693 凭借双模式切换、强劲输出、智能保护等核心优势&#xff0c;为各类音频设备提供了可靠的性能支…

python+flask后端开发~项目实战 | 博客问答项目--模块化文件架构的基础搭建

项目功能概述&#xff1a; 首页(公开博客显示)博客发布与查询用户登录与注册底层MySQL数据库的动态响应与支持 简介&#xff1a;Flask作为Python的一个轻量级Web框架&#xff0c;以其灵活性和可扩展性&#xff0c;赢得了众多开发者的青睐。从本文开始&#xff0c;你将从0开始…

精品方案 | GCKontrol与OMNeT++联合仿真在机载网络性能分析中的应用

概述本文基于GCKontrol搭建了飞行仿真模型&#xff0c;并基于OMNeT搭建了机内网络系统&#xff0c;实现了不同专业、不同平台的模型集成与调试。通过这种联合仿真架构&#xff0c;能够模拟飞机在不同飞行状态下的网络性能&#xff0c;极大提高了性能评估的精度和可靠性。这不仅…

阶跃星辰 StepFun 入驻 GitCode 平台,带来工业级 AI 体验

在 2025 年的 AI 产业应用实践中&#xff0c;开发者面临三重核心挑战&#xff1a;​⚠️上下文窗口局限​&#xff1a;主流 AI 模型普遍受限于 4K-32K 的上下文长度&#xff0c;导致技术方案文档需被强制拆分处理&#xff0c;破坏架构设计的连贯性。 ​⚠️跨行业文档识别缺陷​…

亚马逊新品爆单策略:从传统困境到智能突破

新品上架&#xff0c;是每个亚马逊卖家最期待又最煎熬的阶段。我至今记得一款新品上线后的第一周&#xff1a;每天看着广告费像流水一样烧掉&#xff0c;单量却迟迟不见起色。后台的ACOS一路飙升&#xff0c;几天时间&#xff0c;我的预算已经消耗了一大半。那种“钱花了&#…

第7章 React性能优化核心

性能优化是React开发中的重要主题,直接影响用户体验和应用成功。本章将深入探讨React性能优化的核心技术和最佳实践,从组件记忆化到Bundle优化,帮你掌握构建高性能React应用的关键技能。 通过本章学习,你将掌握如何识别性能瓶颈、选择合适的优化策略,以及在实际项目中应用…

docker CI操作演示分享(第四期)

引言java项目&#xff1a;1、将项目通过maven进行编译打包2、将文件上传到指定的服务器中3、将war包放到tomcat的目录中4、通过Dockerfile将tomcat和war包转成一个镜像&#xff0c;由docker-compose去运行容器项目更新后&#xff1a;将上述流程再次的从头到尾的执行一次go项目&…

Kubernetes 的 YAML 配置文件-kind

Kubernetes的YAML配置文件–kind 在 Kubernetes 的 YAML 配置文件中,kind: 字段用于指定你要创建的资源对象类型。Kubernetes 支持多种资源类型,它们可以分为以下几大类: 一、核心资源类型(常用) 1. Pod 描述:最小的部署单元,包含一个或多个容器。 特点:临时性(Pod …

Tumblr长文运营:亚矩阵云手机助力多账号轮询与关键词布局系统

——基于硬件虚拟化与AI语义分析的垂直内容渗透方案​一、技术架构&#xff1a;长文运营的三大核心引擎​​多账号轮询系统​​虚拟设备集群​&#xff1a;基于ARM服务器虚拟化技术&#xff08;如亚矩阵RK3588芯片&#xff09;&#xff0c;单台物理服务器可模拟500独立Tumblr客…

K8s命名空间:资源隔离与管理的核心

K8s 命名空间&#xff08;Namespace&#xff09;概念Kubernetes&#xff08;K8s&#xff09;中的命名空间是用于在集群内对资源进行逻辑隔离的机制&#xff0c;通过划分不同的命名空间&#xff0c;可以将集群资源&#xff08;如 Pod、Service、Deployment 等&#xff09;分配到…

MTK Linux DRM分析(一)- DRM简介

Linux的DRM&#xff08;Direct Rendering Manager&#xff09;驱动是内核中管理图形硬件的核心子系统&#xff0c;旨在支持现代显卡的复杂功能&#xff08;如3D渲染、多图层合成和硬件加速&#xff09;&#xff0c;同时解决传统FB&#xff08;Framebuffer&#xff09;架构的局限…

数据挖掘笔记:点到线段的距离计算

1. 写在前面 最近在搞一个"大曲率弯道"场景的数据挖掘&#xff0c;里面有个逻辑是给定自车的定位坐标和车道线的坐标点&#xff0c;根据点到线段的距离&#xff0c;去找到自车所在的车道中心线。 然后发现这个计算其实在很多场景中都是可以用到的&#xff0c;所以就…

C++篇(2)C++入门(下)

一、引用1.1 引用的概念和定义引用不是新定义一个变量&#xff0c;而是给已经存在的变量取别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用一块内存空间。类型& 引用别名 引用对象int a 10;int& b a; //b是a的引用1.2 引用的…

Windows 如何清理右键菜单?电脑桌面右键菜单里出现一个清理内存 怎么去掉?

RightMenuMgr是一款绿色小巧免费的右键菜单管理工具&#xff0c;简体中文界面&#xff0c;很方便操作&#xff0c;可以帮助用户轻松管理右键菜单&#xff0c;能够重新定义传统的右键&#xff0c;软件体积小&#xff0c;功能强大&#xff0c;安全无毒&#xff0c;且使用免费&…

【力扣 Hot100】 刷题日记——双指针的经典应用

D11 两数之和 II - 输入有序数组 LCR 006. 两数之和 II - 输入有序数组 - 力扣&#xff08;LeetCode&#xff09; 这道题目也是双指针的一个典型应用&#xff0c;题目要求找出和为target的两个数字的下标&#xff0c;并且告诉了有且仅有一对符合条件的数字。 而且题目已经给…

在一台没联网的机器上,用ollama加载qwen3,14b

文章目录 背景 去另一台机器下载模型 使用docker部署ollama 后续 背景 项目甲方终于搞定了一台T4,咱们的项目又可以正常推进了。 但是,高高兴兴地上去之后,发现,此机器竟不可以联网~ 不过好在,前辈已经把docker装好了。 竟然还有ollama的镜像。 可以的,至少可以节省一…

Angular由一个bug说起之十八:伴随框架升级而升级ESLint遇到的问题与思考

伴随框架升级而升级ESLint遇到的问题与思考 对于eslint这个前端事实上的代码检查工具标准&#xff0c;大家可能是再熟悉不过了。几乎是在编码的时时刻刻都在和它接触。在我们开发维护长达十年的项目中自然也是采用了ESLint&#xff0c;在从 AngularJS 一路到今天现代化的 Angu…

unfold 切图像,图形transformer的切割操作

import torch x torch.arange(8*12).view(1,1,8,12) mx.unfold(2, 4, 4) n m.unfold(3, 4, 4)输入第一次切&#xff0c;切高度维度&#xff0c;但是切完做了转置 &#xff0c;得到&#xff08;1&#xff0c;1&#xff0c;2&#xff0c;12&#xff0c;4&#xff09;切宽度 得…

基于最小二乘支持向量机的数据回归预测 LSSVM

一、作品详细简介 1.1附件文件夹程序代码截图 全部完整源代码&#xff0c;请在个人首页置顶文章查看&#xff1a; 学行库小秘_CSDN博客​编辑https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夹说明 1.2.1 main.m主函数文件 该MATLAB 代码实现了…