MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询
一、生成学生信息脚本
利用该脚本可以生成任意个学生信息,包括学号、姓名、班级、年级、专业、课程名称、课程成绩等信息,此处生成2万名学生,学生所有信息都是给定范围后随机生成。
生成学生信息后,再来对学生信息进行简单查询。
- 主函数
函数的说明:generateStudents(生成学生的人数,年级,是否覆盖之前的值,是否分片),运行完程序后,会生成2w名学生信息
// 主程序从这里开始
generateStudents(10000,2022,true,false);//overwrite=true 1000个学生,2018级
generateStudents(10000,2021,false,false);
- 生成学生数据
默认有四个参数,生成100个学生信息,年级是2020,覆盖掉之前的文档,分片
function generateStudents(snum=100, sgrade=2020, overwrite=true, sharding=true) {db = db.getSiblingDB("cqust"); // use cqust;创建数据库if (sharding) {sh.enableSharding("cqust");}if (overwrite) {db.getCollection("students").drop();// 等价于db.students.drop() 删除students集合if (sharding)sh.shardCollection("cqust.students",{"sno":"hashed"});}for(var i=0; i<snum/100; i++){//创建snum个学生,每100个作为一批,太多可能影响效率var StudentsDoc = new Array();for(var j=0; j<100; j++){var sid = sgrade*1e6+i*100+j;//定义变量var sname = getRandName();var gender = Math.floor(Math.random()*2);var phone = getRandPhone();var major = getRandMajor();var height = Math.floor(Math.random()*30+gender*5+150);var weight = Math.floor(Math.random()*30+gender*20+40);var sclass = Math.floor(Math.random()*4+1);var courses = new Array();for(var k=0; k<Math.floor(Math.random()*5);k++){var course_credit = getRandCourse();courses[k] = {"course":course_credit[0], "credit":course_credit[1], "score":Math.floor(Math.random()*50)+50};}StudentsDoc[j] = {"sno":sid,"name":sname, "gender":gender, // "height":height, // "weight":weight,"body":{"height":height, "weight":weight},//嵌入文档"list":[Math.ceil(Math.random()*6),Math.ceil(Math.random()*6),Math.ceil(Math.random()*6)],//三个随机数1-6"phone":phone, "role":"student", "major": major,"grade": sgrade, "class": sclass, "courses":courses};}db.getCollection("students").insertMany(StudentsDoc);// db.students.insertMany(StudentsDoc) 如果是1000个学生信息,插入10次,一次100}
}
在该程序中,【Math.random(): 生成一个 [0, 1) 之间的随机小数(包括 0,不包括 1)。Math.random() * 6: 将随机数放大到 [0, 6) 的范围。Math.ceil(): 将上述结果向上取整,形成一个范围 [1, 6] 的整数(只有 1 到 6 这六个数能被生成)。重复三次:为了生成三个随机数,将 Math.ceil(Math.random() * 6) 这一段复制了三次,形成了一个包含这三个随机数的数组】
3. 生成随机手机号
function getRandPhone(){//手机开头3位数var heads = ["134","138","139","150","151","152","157","158","159","170","189"];//举例:0.5x11=5.5向下取整等于5,取heads[5]var phone = heads[Math.floor(Math.random()*heads.length)];var numbers = [1,2,3,4,5,6,7,8,9];for(var i=0; i<8; i++){phone+=numbers[Math.floor(Math.random()*numbers.length)];}return phone;
}
在该函数中,Math.random() 生成一个 [0, 1) 的随机数,通过乘以 heads.length 来得到一个适合数组索引的随机数。Math.floor 将其向下取整,确保得到一个有效的数组索引。
导入方式:
- 命令行方式
mongo .\GenerateStudents.js
mongo .\GenerateStudents.js --shell
(加了--shell运行完毕后,直接进入shell里面)
show dbs
db.students.find().pretty()//方便显示
- Navicat查询方式(直接将代码复制到查询中运行即可)
在网格视图中,红色类型为字符串类型,右对齐是数值类型,如果需要展开,这种点操作符说明是嵌入文档
二、简单查询操作
- 查询身高170以上的学生
use cqust;
// 查询身高170以上的学生
//"body": {
// "height": 179,
// "weight": 62
// },
var 查询条件 = {"body.height":{$gt:170}};
var 查询条件 = {"body.height":170};
// var 查询条件 = {body.height:170};// 字段名中有.和$, 不打引号要报错
var 返回字段 = {};
db.students.find(查询条件,返回字段);
- 身高小于160,体重大于60
// 身高小于160,体重大于60
//写法一:
var 查询条件 = {"body.height":{$lt:160}, "body.weight":{$gt:60}};
var 返回字段 = {};
db.students.find(查询条件,返回字段);
//写法二:
var 查询条件1 = {"body.height":{$lt:160}};
var 查询条件2 = {"body.weight":{$gt:60}};
var 查询条件 = {$and:[查询条件1,查询条件2]};//逻辑运算符后面必须加数组
var 返回字段 = {};
db.students.find(查询条件,返回字段);
- 列表字段查询
//列表字段查询
// "list": [
// 6,
// 2,
// 1
// ]
var 查询条件1 = {"list":[4,5,6]}; // 值是数组,且完全匹配列表元素数量, 顺序不能变
var 查询条件e = {"list":[4,5]}; // 错误,值是数组,不完全匹配,查不到
//只匹配两个元素,需要用到数组查询运算符$all
var 查询条件2 = {"list":{$all:[4,5]}}; // 值是列表,元素数量完全匹配,顺序可以变
var 查询条件3 = {"list":6}; // 任意包含6的数组都查到
db.students.find(查询条件)
- 查询"数据导入与预处理应用"不及格的学生
//"courses": [
// {
// "course": "大数据分析与内存计算",
// "credit": 4,
// "score": 56
// },
// {
// "course": "数据导入与预处理应用",
// "credit": 4,
// "score": 82
// }
// ]
// 查询"数据导入与预处理应用"不及格的学生【数组中的元素查询,结果不对】
var 查询条件 = {"courses.course":"数据导入与预处理应用","courses.score":{$lt:60}};
var 返回字段 = {};
db.students.find(查询条件,返回字段);
直接查询结果不对,因为在数组中,存在多个元素对应同一个字段条件,会使查询不能对应到元素内部。
加了$elemMatch后查询结果正确。
// 所以用$elemMatch可以在元素内进行匹配
var 查询条件 = {"courses":{$elemMatch:{"course":"数据导入与预处理应用","score":{$lt:60}}}};
//查询条件或者写为json格式
var 查询条件 = {"courses":{$elemMatch:{"course": "数据导入与预处理应用","score": {$lt:60}}}
};
var 返回字段 = {};
db.students.find(查询条件,返回字段);
注意:$elemMatch后面的写法
- 查询"数据导入与预处理应用"不及格的学生的学号和姓名班级,不要_id
// select * from tbname;
// select field1,field2,field3... from tbname;
// 查询"数据导入与预处理应用"不及格的学生的学号和姓名班级,不要_id
var 查询条件 = {"courses":{$elemMatch:{"course":"数据导入与预处理应用","score":{$lt:60}}}};
// 返回字段 = {字段名:是否返回};
// 值是布尔值 (true|false -> 1|0 -> inclusion|exclusion)
var 返回字段 = {sno:true,name:1,major:1,grade:1,class:1,_id:0};
//var 返回字段 = {_id:0,body:0,list:0,gender:0,role:0,phone:0,courses:0};
db.students.find(查询条件,返回字段);
- 查询"数据导入与预处理应用"不及格的学生的除了courses和list以外的所有字段
// 查询"数据导入与预处理应用"不及格的学生的除了courses和list以外的所有字段
var 返回字段 = {courses:0,list:0};
db.students.find(查询条件,返回字段);// 嵌入文档中的字段也可以控制是否返回
var 返回字段 = {"courses.score":0};
db.students.find(查询条件,返回字段);var 返回字段 = {"list":{$slice:[0,1]}}; // [起点index,取几个] index从0开始
//var 返回字段 = {"list":{$slice:-2}}; // 取几个
db.students.find(查询条件,返回字段);
- 修改字段名
//改字段名:新字段名:$旧字段名 构造一个新字段,通过$取旧字段的值
//$ 取值的意思
var 查询条件 = {"courses":{$elemMatch:{"course":"数据导入与预处理应用","score":{$lt:60}}}};
var 返回字段 = {_id:0,学号:"$sno",姓名:"$name",年级:"$grade",专业:"$major",班号:"$class"};
db.students.find(查询条件,返回字段);
- 查询"数据导入与预处理应用"不及格的学生的学号、姓名、年级、班级,和数据导入与预处理应用课程的成绩,不要_id
// 查询"数据导入与预处理应用"不及格的学生的学号、姓名、年级、班级,和数据导入与预处理应用课程的成绩,不要_id
var 查询条件 = {"courses":{$elemMatch:{"course":"数据导入与预处理应用","score":{$lt:60}}}};
var 返回字段 = {_id:0,sno:1,name:1,grade:1,major:1,"courses.course":1,"courses.score":1};
db.students.find(查询条件,返回字段);
- 在上一步操作基础上,返回的成绩中,只显示"数据导入与预处理应用"课程
//在上一步操作基础上,返回的成绩中,只显示"数据导入与预处理应用"课程
var 查询条件 = {"courses":{$elemMatch:{"course":"数据导入与预处理应用","score":{$lt:60}}}};
// 使用elemMatch匹配数组字段中满足条件的
var 返回字段 =
{_id:0,sno:1,name:1,grade:1,major:1,"courses":{$elemMatch:{"course":"数据导入与预处理应用","score":{$lt:60}}}};
db.students.find(查询条件,返回字段);
课堂练习二:
1.利用GenerateStudents.js脚本生成2w个学生信息,并保存到mongodb中。
2.查询体重70及以上学生信息。
3.查询身高大于180,体重大于65学生信息。
4.查询"大数据概论"课程及格的学生。
5.查询"大数据概论"课程及格的学生中,除了courses和list意外的所有字段。
相关文章:
MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询
一、生成学生信息脚本 利用该脚本可以生成任意个学生信息,包括学号、姓名、班级、年级、专业、课程名称、课程成绩等信息,此处生成2万名学生,学生所有信息都是给定范围后随机生成。 生成学生信息后,再来对学生信息进行简单查询。…...
java核心技术点都有哪些
1. 面向对象编程(OOP) 核心概念:类、对象、继承、封装、多态。 比喻:面向对象编程就像是在搭建一个积木城堡。类(Class)是城堡的设计图纸,它定义了城堡的结构和功能;对象(…...
4404 - 提高:二分与三分:曲线(三分)
明明做作业的时候遇到了n个二次函数Si(x)=ax22+bx+c,他突发奇想设计了一个新的函数F(x)=max(Si(x)), i=1,2...n。 明明现在想求这个函数在[0,10000]的最小值,要求精确到小数点后四位四舍五入。 输入 输入包含T 组数据 (T<10) ,每组第一行一个整数 n(n≤10000) ,之后n行…...
软件工程--需求分析与用例模型
面向对象分析(ObjectOrientedAnalysis,简称OOA) 分析和理解问题域,找出描述问题域所需的类和对象,分析它们的内部构成和外部关系,建立独立于实现的OOA模型,暂时忽略与系统实现有关的问题。 主要使用UML中的以下几种图…...
预测房价学习
1. 实现函数来方便下载数据 import hashlib import os import tarfile import zipfile import requestsDATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)):"""下载一个DATA_HUB中…...
电脑无法上网,但是微信、QQ可以正常使用
这种情况一般是由于DNS服务器配置错误,或者已有的DNS服务器无法正常解析地址造成的。 按下winR打开运行,输入ncpa.cpl,点击确定。 在打开的网络连接窗口中找到对应的网卡,双击打开。一般有线网是“以太网”,无线网&am…...
C++11新特性(列表初始化与右值引用折叠与完美转发)
c11 列表初始化c98的{}c11的{}std::initializer_list 右值引用和移动语义左值和右值的概念左值引用和右值引用引用延长临时对象生命周期左值和右值的参数匹配左值引用的主要使用场景移动构造和移动赋值引用折叠完美转发 列表初始化 c98的{} 在C98中,大括号 {} 的使…...
基于SSH的物流运输货运车辆管理系统源码
基于经典的ssh(Spring Spring MVC Hibernate)框架与SaaS(软件即服务)模式,我们为运输企业与物流公司打造了一款开源且易用的车辆管理系统。 该系统主要包含以下核心模块: 档案管理 财务管理 借款管理 保…...
基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)
目录 1. 延迟关闭订单 1.1 订单延时关闭功能技术选型 1.1.1 定时任务 1.1.2 RabbitMQ 1.1.3 Redis 过期监听 1.1.4 Redisson 1.1.5 RocketMQ 1.2 RocketMQ订单延时关闭发送方实现 1.3 RocketMQ订单延时关闭的消费方实现 1. 延迟关闭订单 用户发起订单后,如…...
HarmonyOS ArkTS与C++数据类型转换
1. HarmonyOS ArkTS与C数据类型转换 本文介绍了C与TS各自数据类型与互相之间的数据类型转换,在需要使用C模块时可以快速上手对各种数据类型进行转换。 1.1. 概述 HarmonyOS的主力开发语言是ArkTS,也提供了C语言的支持,对于一些能力ÿ…...
腾讯云或阿里云centos7安装Redis,并解决端口无法访问的问题
问题背景 最近自建的网站JeecgFlow在云环境安装redis时候,出现端口无法远程进行访问。 浪费好了好久时间进行排查, 记录一下Redis在云环境centos7环境下如何安装,并且远程访问。 Redis安装 //安装c 用于编译redis yum install gcc-c//在/u…...
【小问题】距离估计和频率估计的方差下界推导出距离估计的方差下界
【1】OFDM Radar Algorithms in Mobile Communication Networks pp34 文章目录 1. 频率和距离之间的关系2. 计算 d ^ \hat{d} d^ 对 n ^ \hat{n} n^ 的导数3. 将频率的方差转化为距离的方差4. 从频率的 CRB 获得 var [ n ^ ] \operatorname{var}[\hat{n}] var[n^]5. 将 …...
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
介绍 在当今数据驱动的世界中,抓取动态网页内容变得越来越重要,尤其是像抖音这样的社交平台,动态加载的评论等内容需要通过特定的方式来获取。传统的静态爬虫方法难以处理这些由JavaScript生成的动态内容,Selenium爬虫技术则是一…...
Z-BlogPHP显示错误Undefined array key 0 (set_error_handler)的解决办法
今天打开博客的时候,意外发现页面,打开均显示错误:Undefined array key 0 (set_error_handler)。 博客程序采用的是Z-BlogPHP。百度了一圈没有找到解决办法,在官方论坛里也没找到解决办法。 于是开始自己排查原因。我服务器采用…...
java-实例化一个List,然后添加数据的方法详解
在Java中,实例化一个 List 并向其中添加数据非常简单。List 是一个接口,因此我们通常使用它的常见实现类 ArrayList 或 LinkedList。以下是一些常见的操作方法: ### 1. 使用 ArrayList 实例化并添加数据 java import java.util.ArrayList; …...
【Linux系统】Ubuntu的简单操作
什么是 Ubuntu? Ubuntu(乌帮图)是一个非洲词汇,它的意思是“人性对待他人”或“群在故我在”。Ubuntu发行版将Ubuntu精神带到软件世界之中。 目前已有大量各种各样基于GNU/Linux的操作系统,例如:Debian,SuSE,Gentoo,R…...
标准日志插件项目【C/C++】
博客主页:花果山~程序猿-CSDN博客 文章分栏:项目日记_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一,项目介…...
SpingBoot原理
SpingBoot原理 在前面十多天的课程当中,我们学习的都是web开发的技术使用,都是面向应用层面的,我们学会了怎 么样去用。而我们今天所要学习的是web后端开发的最后一个篇章springboot原理篇,主要偏向于底 层原理。 我们今天的课程…...
Cout输出应用举例
Cout输出应用 在main.cpp里输入程序如下: #include <iostream> //使能cin(),cout(); #include <stdlib.h> //使能exit(); #include <sstream> #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和res…...
java的无锁编程和锁机制
Java 的并发编程中,为了保证线程安全和高性能,采用了两种主要的同步手段:锁机制和无锁编程。以下是对锁机制、无锁编程、死锁及其避免的详细讲解。 一、无锁编程 无锁编程通过原子操作来避免传统锁,从而减少线程的上下文切换&am…...
vue实现富文本编辑器上传(粘贴)图片 + 文字
vue实现富文本编辑器上传(粘贴)图片 文字 1.安装插件 npm install vue-quill-editor -s2.在使用vue-quill-editor富文本的时候,对于图片的处理经常是将图片转换成base64,再上传数据库,但是base64不好存储。 原理&a…...
子集和全排列(深度优先遍历)问题
欢迎访问杀马特主页:小小杀马特主页呀! 目录 前言: 例题一全排列: 1.题目介绍: 2.思路汇总: 3.代码解答: 例题二子集: 题目叙述: 解法一: 1.思路汇总…...
判断检测框是否在感兴趣区域(ROI)内
判断检测框是否在感兴趣区域(ROI)内 在计算机视觉和图像处理中,我们经常需要确定一个矩形检测框是否位于一个特定的感兴趣区域(Region of Interest, ROI)内。这个ROI可以是一个多边形,而检测框则是一个矩形…...
正点原子阿尔法ARM开发板-IMX6ULL(九)——关于SecureCRT连接板子上的ubuntu
文章目录 一、拨码器二、SecureCRT 一、拨码器 emmm,也是好久没学IMX6ULL了,也是忘了拨码器决定了主板的启动方式 一种是直接从TF卡中读取文件(注意这里是通过imdownload软件编译好了之后,通过指令放入TF卡) 一种是现在这种用串口…...
微信支付Java+uniapp微信小程序
JS: request.post(/vip/pay, {//这是自己写的java支付接口id: this.vipInfo.id,payWay: wechat-mini}).then((res) > {let success (res2) > {//前端的支付成功回调函数this.$refs.popup.close();// 支付成功刷新当前页面setTimeout(() > {this.doGetVipI…...
【NOIP提高组】加分二叉树
【NOIP提高组】加分二叉树 💐The Begin💐点点关注,收藏不迷路💐 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整…...
HarmonyOS 相对布局(RelativeContainer)
1. HarmonyOS 相对布局(RelativeContainer) 文档中心:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-relative-layout-V5 RelativeContainer为采用相对布局的容器,支持容器内部的子元素设…...
webpack5搭建react脚手架详细步骤
1. 初始化项目 首先,创建一个新目录并初始化项目: bash mkdir create-react cd create-react pnpm init --y git init 这里使用pnpm作为包管理工具,因为它在处理依赖和速度上表现更好。 2. 安装React和TypeScript 安装React和React-DOM…...
速盾:高防cdn怎么拦截恶意ip?
高防CDN(Content Delivery Network)是一种用于防御网络攻击和提供高可用性的服务。它通过分发网络流量,将用户的请求导向最近的服务器,从而提高网站的加载速度和稳定性。然而,不可避免地,有些恶意IP地址会试…...
太阳能面板分割系统:训练自动化
太阳能面板分割系统源码&数据集分享 [yolov8-seg-EfficientHead&yolov8-seg-vanillanet等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Globa…...
百度seo最新算法/深圳seo公司排名
大批量插入数据 如果一次性需要插入大批量数据,使用insert语句插入性能较低 可以使用MySQL数据库提供的load 指令进行数据插入 # 客户端连接服务端时,加上参数 --local-infile mysql --local-infile -uroot -p# 设置全局参数local_infile,…...
马鞍山网站建设设计/东莞seoseo关键词排名优化
一般情况下,我们使用的是nvidia -smi 来监控,但不美观且信息冗余,此处使用gpustat来监控,可直接安装:pip install gpustat 然后我们输入gpustat即可得到: 但此时无法实时获取,使用以下命令即可…...
wordpress企业网站模板/北京百度推广公司
杨利民: 点击打开链接王静: 点击打开链接颜洁: 点击打开链接伍道军: 点击打开链接陈俊: 点击打开链接 向慧琳:点击打开链接 张埂铝:点击打开链接 蒋俊:点击打开链接 代思雨ÿ…...
网站伪静态/西安企业网站seo
Activity、Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者通信的方式。想…...
一个网站做数据维护3天正常吗/企业网站怎么优化
4.1 实战:在域环境安装和配置企业CA 本节目标: 安装企业CA 为域中的计算机安装pop3和SMTP服务 在域中创建用户zhang 电子邮箱地址为zhangess.com 在域中创建用户wang电子邮箱地址为wangess.com 掌握批量设置域用户电子邮件地址 掌握域用户申请证书…...
专业做汽车零部件平台的网站/域名注册腾讯云
1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法。 它是对对象行为的定义,也是对功能的规范。 示例: // GoodChild.h #import <Foundation/Foundation.h> protocol GoodChild <NSObject> -(…...