MongoDB的索引与聚合
一、实验目的
1. 理解索引的概念及其在MongoDB中的重要性和作用。
2. 学习如何选择适合建立索引的字段。
3. 掌握如何创建、删除索引以及如何强制使用索引。
4. 熟悉MongoDB的聚合框架和MapReduce工具,以及简单聚合命令的使用。
二、实验环境准备
1. JAVA环境准备:确保Java Development Kit (JDK) 已安装并配置好环境变量。
2. Hadoop环境准备:安装并配置Hadoop环境,确保Hadoop的各个组件可以在伪分布式模式下运行。
三、实验教材参考
《大数据存储》,谭旭,人民邮电出版社,2022,ISBN 978-7-115-59414-3。
四、实验内容与步骤
1、索引操作
1. 创建文档并插入数据
db.createCollection("studata")
db.studata.insert({
name:"Alice",
age:22,
score:85,
class:"Physics"
})

db.studata.insert([{ name: "Alice", age: 22, score: 85, class: "Physics" },
{ name: "Bob", age: 21, score: 78, class: "Chemistry" },
{ name: "Charlie", age: 23, score: 92, class: "Physics" },
{ name: "David", age: 20, score: 65, class: "Mathematics" }
]);

2. 创建单字段索引
db.studata.createIndex({age:1})

3. 创建复合索引
db.studata.createIndex({ class: 1, score: -1 });

4. 创建文本索引
db.studata.createIndex({ name: "text" });

5. 查看查询计划并评估单字段索引效果
db.studata.find({ age: 22 }).explain("executionStats");


6. 查看查询计划并评估复合索引效果
db.studata.find({ class: "Physics", score: { $gt: 80 } }).explain("executionStats");


7. 查看查询计划并评估文本索引效果
db.studata.find({ $text: { $search: "Alice" } }).explain("executionStats");


8. 删除索引
删除单字段索引
db.studata.dropIndex({ age: 1 });

删除复合索引
db.studata.dropIndex({ class: 1, score: -1 });

2、聚合工具
1. 统计文档数量
db.studata.aggregate([
{ $match: { class: "Physics" } },
{ $group: { _id: null, total_students: { $sum: 1 } } }
]);

2. 获取字段唯一值
db.studata.distinct("class");

3. 分组统计
db.studata.aggregate([
{ $group: {
_id: "$class",
total_students: { $sum: 1 },
average_score: { $avg: "$score" }
} }
]);

4. 排序和限制
按分数降序排列,取前5名
db.studata.aggregate([
{ $sort: { score: -1 } },
{ $limit: 5 }
]);

5. 使用MapReduce处理复杂的聚合任务
db.studata.mapReduce(
function() { emit(this.class, this.score); },
function(key, values) { return Array.sum(values); },
{
out: "class_total_scores"
}
);

查看 MapReduce 结果
db.class_total_scores.find();

相关文章:
MongoDB的索引与聚合
一、实验目的 1. 理解索引的概念及其在MongoDB中的重要性和作用。 2. 学习如何选择适合建立索引的字段。 3. 掌握如何创建、删除索引以及如何强制使用索引。 4. 熟悉MongoDB的聚合框架和MapReduce工具,以及简单聚合命令的使用。 二、实验环境准备 1. JAV…...
Java菜鸟养成计划(java基础)--java运算符
java中的运算符 1、java中的运算符1.1 、 、-、 * 、/ 、 %1.2 、、-、 *、/、%1.3 、、--【自增\自减运算符】1.4、>、 <、 > 、< 、 、! 、! 1.5、&&、||、|、&1.6、&、|、~、^1.7、>> 、 <<、>>>位运算1.8、?:三目运算符…...
除了基本的事件绑定,鸿蒙的ArkUI
鸿蒙操作系统(HarmonyOS)是由华为技术有限公司开发的分布式操作系统,旨在为多种智能设备提供一个统一的操作平台。它不仅适用于智能手机,还适用于平板电脑、智能手表、智能电视等物联网设备。为了使开发者能够更加便捷地创建跨设备…...
0164__【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os
【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os_gcc -o0-CSDN博客...
vue3组件传值具体使用
问: left.vue文件调用接口获取了后端返回的urlLink字段,我该怎么传递给总的父组件index.vue中,我需要点击父组件的一个按钮来触发跳转? 回答: 在 Vue 3 中使用 TypeScript 和 setup 语法糖时,可以通过 e…...
Web 音视频(二)在浏览器中解析视频
前言 浏览器中已经能直接播放视频,为什么还需要手动写代码解析? 因为,某些场景需要对视频进行更细致的处理,比如截取关键帧、提取视频中的文字、人物打码、极低延时播放视频等等。 总之,除了最单纯的视频播放外&…...
江天科技主要产品销售单价下滑,应收账款、存货周转率大幅下降
《港湾商业观察》廖紫雯 日前,苏州江天包装科技股份有限公司(以下简称:江天科技)冲击北交所,保荐机构为国投证券。 江天科技主要从事标签印刷产品的研发、生产与销售,公司主要产品包括薄膜类和纸张类的不…...
我国的金融组织体系,还有各大金融机构的分类,金融行业的组织
中国金融组织体系介绍 中国金融组织体系是一个复杂而多层次的系统,涵盖了各种类型的金融机构和监管机构。以下是关于中国金融组织体系的详细介绍,包括一行三会等金融监管机构,各大金融机构的分类、涉及的银行以及行业组织。 (一…...
vue md5加密
在Vue中使用MD5加密,你可以使用第三方库如crypto-js。首先,你需要安装这个库: npm install crypto-js --save然后,在你的Vue组件中引入crypto-js并使用其MD5功能: <template><div><input v-model&quo…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)
本文验证基于请求头中传递token信息的认证方式,webapi项目的控制器类中新建如下函数,仅通过验证的客户端能调用,需要客户端请求在Header中添加’Authorization’: Bearer token’的键值对且通过token验证后才能调用。 [Authorize] [HttpGet]…...
Ubuntu16.04 安装OpenCV4.5.4 避坑
Ubuntu16.04 安装C版OpenCV4.5.4 Ubuntu16.04 VSCode下cmakeclanglldb调试c 文章目录 Ubuntu16.04 安装C版OpenCV4.5.41. 下载Opencv压缩包2. 安装Opencv-4.5.43. 配置OpenCV的编译环境4.测试是否安装成功 1. 下载Opencv压缩包 下载Opencv压缩包,选择source版本。…...
DDD - 整洁架构_解决技术设计困局
文章目录 Pre如何落地 DDD底层技术的更迭 整洁架构的设计主动适配器/北向适配器被动适配器/南向适配器 整洁架构的落地总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对象的两种设计思路…...
Python自动化运维:一键掌控服务器的高效之道
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在互联网和云计算高速发展的今天,服务器数量的指数增长使得手动运维和管理变得异常繁琐。Python凭借其强大的可读性和丰富的生态系统,成为…...
数论问题61一一各种进位制
10进位制是普遍使用的数进位制,二进位制是计算机采用的进位制。还有三进位制,四进位制,…等等。那一种进位制都能转化为10进位制。下面介绍这种方法。 ①10进位制的表示(口诀:逢10进1) 如8X10007X1005x1038753。 ②2进位制的表示(口诀:逢2…...
Java开发提速秘籍:巧用Apache Commons Lang工具库
一、Java 开发效率之困 在当今数字化时代,Java 作为一门广泛应用的编程语言,在各类软件开发项目中占据着举足轻重的地位。无论是大型企业级应用、互联网平台,还是移动应用后端,都能看到 Java 的身影。然而,Java 开发者…...
使用sql查询excel内容
1. 简介 我们在前面的文章中提到了calcite支持csv和json文件的数据源适配, 其实就是将文件解析成表然后以文件夹为schema, 然后将生成的schema注册到RootSehema(RootSchema是所有数据源schema的parent,多个不同数据源schema可以挂在同一个RootSchema下)下, 最终使用…...
[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令
[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令 简介 项目分析 如何执行系统命令并拿到结果 代码实现 简介 在Python学习日记-77中我们介绍了 socket 基于 TCP 和基于 UDP 的套接字,还实现了服务器端和客户端的通信,本…...
电子应用设计方案101:智能家庭AI喝水杯系统设计
智能家庭 AI 喝水杯系统设计 一、引言 智能家庭 AI 喝水杯系统旨在为用户提供个性化的饮水提醒和健康管理服务,帮助用户养成良好的饮水习惯。 二、系统概述 1. 系统目标 - 精确监测饮水量和饮水频率。 - 根据用户的身体状况和活动量,智能制定饮水计划。…...
vue学习路线
以下是一个详细的Vue学习路线: 一、基础入门 (一)环境搭建 1. 安装Node.js和npm:Vue项目依赖于Node.js环境,需从官网下载并安装最新版本的Node.js,npm会随Node.js一起安装。 2. 安装Vue CLI:V…...
(15)Chainlink Automation(定时任务) 详细介绍及用法
Chainlink Automation 详细介绍 1. 什么是 Chainlink Automation? Chainlink Automation 是 Chainlink 提供的一个去中心化服务,专门用于自动化执行智能合约的链上操作。它允许开发者基于时间或特定条件(如链上或链下事件)触发智…...
基于单片机的自行车里程表设计|附源码
基于单片机的自行车里程表设计 源码:点击下载源码 项目简介 这是一个基于51单片机的自行车里程表设计项目,能够实时显示自行车的行驶速度、累计里程,并提供时间显示、超速报警等功能。该项目适合作为单片机课程设计的学习案例,…...
外贸站点SEO优化中如何处理站点的内容优化
外贸站点SEO优化中如何处理站点的内容优化 在当今全球化的商业环境中,外贸站点的SEO优化显得尤为重要。一个成功的外贸站点不仅要吸引国际客户,还需要在搜索引擎结果中获得高排名,以最大限度地提高曝光率和转化率。内容优化是外贸站点SEO优化…...
Grafana 表格自定义下载样式。
我这边的方案是通过 grafana嵌套在iframe中,然后获取数据postmessage 给父页面 调用 excel.js 下载。增加一个html panel , 在 onlint 添加如下代码。该代码会在目标panel的标题上 增加一个 按钮,点击后触发。var targetPanelId 8;setTimeout(function(…...
如何快速使用网络性能测试工具:面向初学者的完整指南
如何快速使用网络性能测试工具:面向初学者的完整指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 想要准确测量网络带宽、排查网速问…...
DevOps 实践与自动化运维:从手动到智能
DevOps 实践与自动化运维:从手动到智能 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知 DevOps 在现代软件开发中的重要性。DevOps 不仅能缩短开发周期,提高软件质量,还能增强系统的可靠性和可维护性。今天,…...
CosyVoice2-0.5B实战案例:跨境电商独立站商品页嵌入式语音播放功能实现
CosyVoice2-0.5B实战案例:跨境电商独立站商品页嵌入式语音播放功能实现 1. 引言:当商品介绍会“说话” 想象一下,你正在浏览一个海外独立站的商品页面,琳琅满目的图片和文字描述让你有些眼花缭乱。这时,你看到一个“…...
Poppler for Windows:让PDF处理不再成为开发瓶颈
Poppler for Windows:让PDF处理不再成为开发瓶颈 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 你是否曾因PDF处理功能的复杂配置而推…...
XXMI启动器:二次元游戏模组统一管理平台完整指南
XXMI启动器:二次元游戏模组统一管理平台完整指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为多款二次元游戏模组管理而烦恼吗?XXMI启动器为你提…...
终极指南:如何用BetterGI智能辅助工具彻底解放你的原神游戏体验
终极指南:如何用BetterGI智能辅助工具彻底解放你的原神游戏体验 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连…...
Qwen-Image-Edit-2511商业落地:快速生成产品设计图,提升工作效率
Qwen-Image-Edit-2511商业落地:快速生成产品设计图,提升工作效率 1. 产品设计效率的革命性提升 在当今快节奏的商业环境中,产品设计团队面临着前所未有的压力:需要在更短时间内交付更多设计方案,同时保持高质量和创新…...
