【DBA课程-笔记】第2章:MongoDB数据数据查询与分析

目录

一、课程大纲 

二、MongoDB 条件查询

1. 制造 MongoDB 测试数据

2. MongoDB 数据查询 与 SQL对应关系

3. MongoDB 查询运算符

4. MongoDB 数据查询、条件查询、过滤

5. MongoDB 条件查询命令

6. MongoDB 数据查询数组条件

A. 精确匹配数组元素:

B. 无顺序 and 精确 匹配

C. 至少匹配一个 

D. 组合条件满足一个条件过滤

E. $elemMatch操作符查询内嵌文档

F. 正则:模糊查询:/.* .*/

G. 正则:以xx开头:/^ .*/ 

H. 正则:以xx结尾:/.* $/

7. MongoDB 数据查询嵌套数组文档

A. 文档嵌套:单条件查询

B. 文档嵌套:多条件查询(and)

三、映射Project 与 过滤

四、去除重复 Distinct

五、聚合分组统计 Group By

A.  三种方式

B:聚合函数 ( 了解即可 )

 注意:4.2.1中已经不支持 group( db.users.help() 查询没有group函数 )

1. 分组统计不同年龄段的用户

2. 分组统计不同用户的订单总额

C:聚合管道

D:MapReduce (非常适用于大数据分析,如基于java的hadoop)

一、课程大纲 

  • MongoDB 条件查询
  • 映射 Project 与 过滤
  • 去除重复 Distinct
  • 分组统计 Group

二、MongoDB 条件查询

1. 制造 MongoDB 测试数据

db.users.insert({name:'frank',age:16,city:'beijing' )
db.users.insert({name:'xulei',age:17,city:'hangzhou' )
db.users.insert(name:'frankxulei'age:18,city:'shanghai')
db.users.insert({name:'alibaba',age: 25,tags:['java','mysql','mongodb'],city:'hangzhou'})
db.users.save()
db.users.insertOne()
db.users.insertMany()

2. MongoDB 数据查询 与 SQL对应关系

MongoDBSQL语句说明
find()all
find({})all
find({fage:18})select * from users where age =18
$lt:18where age<18less rhan
$gt:18where age>18greater than
$lte:18where age<=18less rhan or equal
$gte=:18where age>=18greater than or equal
$in:[18,19]where age in(18,19)
$or:[{age:18}, { name:' frankxulei'}]where age=18 or name= 'frankxuleil'
{age:18,name:'frankxulei'}where age = 18 and name= 'frankxulei'
({“name”:/.*阿里.*/})select * from users where name like “%阿里%”

3. MongoDB 查询运算符

4. MongoDB 数据查询、条件查询、过滤

5. MongoDB 条件查询命令

6. MongoDB 数据查询数组条件

A. 精确匹配数组元素

db.users.find( { tags:["java","mongodb"]})
  •   描述:查出所有数组中包含java和mongodb的文档,且有先后顺序

B. 无顺序 and 精确 匹配

db.users.find( { tags:{$all:["java","mongodb"]}})
  •  描述:查出所有数组中包含java和mongodb的文档

C. 至少匹配一个 

db.users.find( { tags:"java"})
  • 描述:查出所有数组中包含java的文档 


D. 组合条件满足一个条件过滤

db.users.find( { age: { $gt: 15, $lt: 20 }})
  •  描述:查找 age ∈(15,20) 


E. $elemMatch操作符查询内嵌文档

  • 作用:用于查同于个元素中的键值组合,
  • 针对 LIst<object> 查询
  • 详情请参考
db.test.insert({"id":1, "members":[{"name":"BuleRiver1", "age":27, "gender":"M"}, {"name":"BuleRiver2", "age":23, "gender":"F"}, {"name":"BuleRiver3", "age":21, "gender":"M"}]});
  • $elemMatch + 同一个元素中的键值组合
db.test.find({"members":{"$elemMatch":{"name":"BuleRiver1", "age":27}}});
  • $elemMatch+不同元素的键值组合(查不出结果
db.test.find({"members":{"$elemMatch":{"name":"BuleRiver1", "age":23}}});

F. 正则:模糊查询:/.* .*/

 db.users.find( { name:/.*feng.*/ })
  •   描述:查找 name 包含 feng 的文档

G. 正则:以xx开头:/^ .*/

 db.users.find( { name:/^zhang.*/ })
  •   描述:查找 name 以 zhang 开头的文档

H. 正则:以xx结尾:/.* $/

 db.users.find( { name:/.*g$/ })
  •   描述:查找 name 以 g 结尾的文档

7. MongoDB 数据查询嵌套数组文档

  • 造数据,其中 {}表示新的文档
db.users.insert([
{name:'ali',age:51,address:{country:'china',city:'beijing',district:'haidian',dd:'zhongguancunroad 10'}}
{name:'baby',age:51,address:{country:'china',city:'hangzhou',district:'xihu',dd:'zhongguancunroad 10'}}
{name:'baby2',age:17,address:{country:'china',city:'hangzhou',district:'xihu',dd:'zhongguancunroad 10'}}
{name:'baby3',age:18,address:{country:'china',city:'hangzhou',district:'xihu',dd:'zhongguancunroad 10'}}
{name:'xiaowang',age:19,address:{country:'china',city:'shanghai',district:'pudong',dd:'sjtu park 10'}}
])

db.orders.insert([
{name:"frank",items:[{title:"mongodb",count:1},{title:"java",count:3}]},
{name:"xulei",items:[{title:"iphone 8p",count:2}]},
{name:"wangsicong",items:[{title:"RR",count :1},{title:"Benz",count:10}]}]);

A. 文档嵌套:单条件查询

db.users.find({"address.country":'china'})
  •   描述:查 "address.country"='china' 的文档

B. 文档嵌套:多条件查询(and)

db.users.find({"address.country":'china',"address.city":"hangzhou",age:{$gte:18}})
  • 查  "address.country"='china'
  • 且  "address.city"="hangzhou"
  • 且   age≥18

三、映射Project 与 过滤

作用对查询结果的过滤

  • 如:查询后加,{name:1} ,表示只显示 name字段

  • 查询后加,{name:1,age:1} ,表示只显示 name + age 字段

  • 如:查询后加,{age:0} ,表示不显示 age字段

  • 注意: 1 和 0不能同时使用,如 name:1,age:0 ,否则会报错

四、去除重复 Distinct

作用对查询结果去重,并不会删除原文档

db.users.distinct("city")
db.users.distinct("address.city")

五、聚合分组统计 Group By

A.  三种方式

  • 聚合函数 
  • 聚合管道
  • MapReduce非常适用于大数据分析, 如基于java的hadoop

B:聚合函数 ( 了解即可

 注意:4.2.1中已经不支持 group( db.users.help() 查询没有group函数

1. 分组统计不同年龄段的用户

db.users.group(
 {
   key: { age: 1 },
   cond:{ age:{$gt:16 }},
   reduce:function(curr, result) {
        result.total += 1;
        },
   initial: { total : 0 }
 }
)

2. 分组统计不同用户的订单总额

C:聚合管道

D:MapReduce (非常适用于大数据分析,如基于java的hadoop

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

检测到错误页面web应用服务器版本信息泄露

详细描述 Web服务器未能正确处理异常请求导致Web服务器版本信息泄露&#xff0c;攻击者收集到服务器信息后可进行进一步针对性攻击。 解决办法 临时修复建议如下&#xff1a; 1、关闭web服务器错误提示。 2、关闭运行平台的错误提示。 3、建立错误机制&#xff0c;不要把真实…

校园课表微信小程序全栈项目

遇到的第一个问题关于npm start 首先找到对应的后端项目 crtl shift (esc键下的波浪号) 召唤终端 Error:Cannot find module dotenv 解决问题: npm install dotenv 简写 npm i dotenv 然后遇到第二个问题 Port 3000 is already in use 我的3000接口被占用 那就要去检…

leetcode 74. 搜索二维矩阵(java)

搜索二维矩阵 leetcode 74. 搜索二维矩阵题目描述抽象BST代码演示 抽象BST leetcode 74. 搜索二维矩阵 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/search-a-2d-matrix 题目描述 给你一个满足下述两条属性的 m x n 整…

uniapp和uview组件实现下拉触底刷新列表

下面是一个在UniApp中使用uView组件实现下拉触底刷新列表的示例&#xff0c;并使用Axios来请求分页数据列表&#xff1a; 首先&#xff0c;确保你已经在UniApp项目中添加了uView组件库。你可以在项目根目录执行以下命令安装它们&#xff1a; npm install uview-ui或者使用 Hb…

【Vue3】setup参数细讲!computed计算属性和watch监听属性

setup参数细讲&#xff01;computed计算属性和watch监听属性 setup细讲!setup参数&#xff0c;steup&#xff08;props&#xff0c;context&#xff09;参数1.props&#xff0c;负责接收父组件传过来的值参数2.contextcontext.attrscontext.emitcontext.slots&#xff0c; 插槽…

CSS 伪元素: ::marker 自定义列表序号

::marker 伪元素 ::marker&#xff0c;可作用在任何设置了 display: list-item 的元素或伪元素上&#xff0c;例如<li>和<summary>。 /** <ul><li>Peaches</li><li>Apples</li><li>Plums</li> </ul> */ ul li::…

Java 设计模式——迭代器模式

目录 1.概述2.结构3.案例实现3.1.抽象迭代器3.2.具体迭代器3.3.抽象聚合3.4.具体聚合3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——Iterator 1.概述 迭代器模式 (Iterator Pattern) 是一种行为型设计模式&#xff0c;它提供一种顺序访问聚合对象&#xff08;如列表、集合等&…

Hyperledger Fabric测试网络运行官方Java链码[简约版]

文章目录 启动测试网络使用peer CLI测试链码调用链码 启动测试网络 cd fabric-samples/test-networknetwork.sh的脚本语法是&#xff1a;network.sh <mode> [flag] ./network.sh up./network.sh createChannel在java源码路径下 chmod 744 gradlew vim gradlew :set ffu…

「观察者(Observer)」设计模式 Swift实现

这里写目录标题 介绍设计模式介绍举例 iOS 中已有的 观察者设计模式实现Notification什么是通知机制或者说如何实现通知机制&#xff1f; KVOKVO底层实现如何实现手动KVO&#xff1f; 介绍 设计模式介绍 观察者设计模式&#xff08;Observer Pattern&#xff09;是一种行为型…

【ArcGIS Pro二次开发】(49):村规数据入库【福建省】

之前用Arcpy脚本工具做了一个村规数据入库和主要图纸生成工具。 在使用过程中&#xff0c;感觉对电脑环境比较高&#xff0c;换电脑用经常会一些莫名其妙的错误&#xff0c;bug修得很累。近来随着ArcGIS Pro SDK的熟悉&#xff0c;就有了移植的想法。 这里先把村规数据入库工…

TabLayout+ViewPager实现滚动页面

目录 一、TabLayout介绍 二、TabLayout的常用属性和方法 常用属性&#xff1a; 常用方法&#xff1a; 三、适配器介绍 &#xff08;一&#xff09;、PagerAdapter介绍&#xff1a; &#xff08;二&#xff09;、FragmentPagerAdapter介绍&#xff1a; &#xff08;三&am…

Python结巴中文分词笔记

&#x1f4da; jieba库基本介绍 &#x1f310; jieba库概述 Jieba是一个流行的中文分词库&#xff0c;它能够将中文文本切分成词语&#xff0c;并对每个词语进行词性标注。中文分词是自然语言处理的重要步骤之一&#xff0c;它对于文本挖掘、信息检索、情感分析等任务具有重要…

Android.mk 文件使用解析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Android.mk 简介二、Android.mk 的基本格式三、Android.mk 深入学习一四、 Android.mk 深入学习二五、 Android.mk 深入学习三六、 Android.mk 判断…

引入头文件#include <iostream>的时候发生了什么?

<iostream> namespace std {extern istream cin;extern ostream cout;extern ostream cerr;extern ostream clog;extern wistream wcin;extern wostream wcout;extern wostream wcerr;extern wostream wclog;};cin是什么&#xff1f; cin extern istream cin; The objec…

关于Windows 11 docker desktop 运行doris 容器时vm.max_map_count=2000000的设置问题

需要一个简单的测试环境&#xff0c;于是准备用docker启动一个1fe 1be的简单玩一下 如果be容器启动后再去修改 /etc/sysctl.conf sysctl -w vm.max_map_count2000000 这个参数是没用的&#xff0c;be仍然会启动失败 这时可以打开cmd wsl --list C:\Users\pc>wsl --list …

TeeChart for.NET Crack

TeeChart for.NET Crack TeeChart for.NET为各种图表需求提供了图表控件&#xff0c;包括金融、科学和统计等重要的垂直领域。它可以处理您的数据&#xff0c;在各种平台上无缝创建信息丰富、引人入胜的图表&#xff0c;包括Windows窗体、WPF、带有HTML5/Javascript渲染的ASP.N…

用户、角色、权限、菜单--数据库设计

用户角色关联表--user_role id-------------------主键 user_id------------用户ID role_id-------------角色ID create_time------创建时间 is_deleted--------状态&#xff08;0&#xff1a;未删除 1&#xff1a;删除&#xff09; 角色权限关联表--role_permission id------…

JVM回收算法(标记-清除算法, 复制算法, 标记-整理算法)

1.标记-清除算法 最基础的算法&#xff0c;分为两个阶段&#xff0c;“标记”和“清除” 原理&#xff1a; - 标记阶段&#xff1a;collector从mutator根对象开始进行遍历&#xff0c;对从mutator根对象可以访问到的对象都打上一个标识&#xff0c;一般是在对象的header中&am…

LiveGBS流媒体平台GB/T28181功能-作为上级平台对接海康大华华为宇视等下级平台监控摄像机NVR硬件执法仪等GB28181设备

LiveGBS作为上级平台对接海康大华华为宇视等下级平台监控摄像机NVR硬件执法仪等GB28181设备 1、背景说明2、部署国标平台2.1、安装使用说明2.2、服务器网络环境2.3、信令服务配置 3、监控摄像头设备接入3.1、海康GB28181接入示例3.2、大华GB28181接入示例3.3、华为IPC GB28181接…

Mybatis架构简介

文章目录 1.整体架构图2. 基础支撑层2.1 类型转换模块2.2 日志模块2.3 反射工具模块2.4 Binding 模块2.5 数据源模块2.6缓存模块2.7 解析器模块2.8 事务管理模块3. 核心处理层3.1 配置解析3.2 SQL 解析与 scripting 模块3.3 SQL 执行3.4 插件4. 接口层1.整体架构图 MyBatis 分…