当前位置: 首页 > news >正文

Mongo常用语法(java代码)

1、根据agentId字段分组,并对totalCustomerNum、refundCustomerNum字段 sum求和,同时取别名

    @Overridepublic List<AgentCountInfoBean> selectCurrentMonthNewResource(Set<String> orderTypeSet, List<String> agentIds,LocalDateTime startTime, LocalDateTime endTime) {Aggregation aggr = newAggregation(match(where("agentId").in(agentIds).and("agentOrderType").in(orderTypeSet).and("agentOrderStatus").in(Arrays.asList(AgentOrderStatusEnum.NOT_START.status, AgentOrderStatusEnum.PROCESSING.status)).andOperator(EmptyUtils.isNotEmpty(startTime) ? Criteria.where("createTime").gte(startTime) : new Criteria(),EmptyUtils.isNotEmpty(endTime) ? Criteria.where("createTime").lte(endTime) : new Criteria(), EmptyUtils.isNotEmpty(endTime) ? Criteria.where("hopeStartTime").lte(endTime) : new Criteria())),group("agentId").first("agentId").as("agentId").sum("totalCustomerNum").as("totalCount").sum("refundCustomerNum").as("refundCustomerNum"));AggregationResults<AgentCountInfoBean> results = secondaryMongoTemplate.aggregate(aggr, ResAgentOrderMo.class, AgentCountInfoBean.class);if (EmptyUtils.isNotEmpty(results)) {return results.getMappedResults();}return null;}

2、对agentId分组,并统计每个agentId分组后的个数,类似于mysql的select agentId,count(agentId) from tabel group by agentId;

    @Overridepublic List<String> findNonFirstMonthBuyResource(LocalDateTime startDate, List<String> leadingEagleIds, Set<String> agentOrderSetsT) {Aggregation aggr = newAggregation(match(where("agentId").in(leadingEagleIds).and("agentOrderType").in(agentOrderSetsT).and("agentOrderStatus").ne(AgentOrderStatusEnum.NOT_PAY.status).andOperator(EmptyUtils.isNotEmpty(startDate) ? Criteria.where("payTime").lte(startDate) : new Criteria())),group("agentId").first("agentId").as("agentId").count().as("count"));AggregationResults<AgentCountBean> results = secondaryMongoTemplate.aggregate(aggr, ResAgentOrderMo.class, AgentCountBean.class);if (EmptyUtils.isNotEmpty(results)) {return results.getMappedResults().stream().map(AgentCountBean::getAgentId).collect(Collectors.toList());}return null;}

3、根据条件查询,然后只返回某个字段同时去重

    @Overridepublic List<String> findNotEndAgentIdsByTypeAndSaleAreas(Set<String> agentOrderTypes, List<String> areaIds) {Query query = query(where("agentOrderType").in(agentOrderTypes).and("agentOrderStatus").in(Arrays.asList(AgentOrderStatusEnum.NOT_START.status, AgentOrderStatusEnum.PROCESSING.status)).and("hopeStartTime").lte(LocalDateTime.now()).and("notMatchCustomerNum").gt(0).andOperator(EmptyUtils.isNotEmpty(areaIds) ? Criteria.where("areaId").in(areaIds) : new Criteria()));return secondaryMongoTemplate.findDistinct(query, "agentId", ResAgentOrderMo.class, String.class);}

4、根据两个字段分组,同时根据某个字段排序

    @Overridepublic List<AgentOrderBcVo> findFirstOrder(String agentId) {Criteria criteria = new Criteria();// 排除每日抢领活动criteria.and("agentOrderType").ne(AgentOrderTypeEnum.DAILY_GRABBING.type);criteria.and("notMatchCustomerNum").gt(0);criteria.and("agentId").is(agentId);criteria.orOperator(Criteria.where("agentOrderStatus").is(AgentOrderStatusEnum.NOT_START.status),Criteria.where("agentOrderStatus").is(AgentOrderStatusEnum.PROCESSING.status));List<AggregationOperation> operations = new ArrayList<>();operations.add(Aggregation.match(criteria));Sort sort = Sort.by(Sort.Direction.ASC, "hopeStartTime");//按照期望开始时间正序operations.add(Aggregation.sort(sort));operations.add(Aggregation.group("agentOrderType", "agentOrderDesc").first("_id").as("agentOrderId").first("payTime").as("payTime").first("agentOrderType").as("agentOrderType").first("agentOrderDesc").as("agentOrderDesc").first("agentName").as("agentName").first("phoneNumber").as("phoneNumber").first("buyCustomerNum").as("buyCustomerNum").first("giveCustomerNum").as("giveCustomerNum").first("couponCustomerNum").as("couponCustomerNum").first("payType").as("payType").first("payPrice").as("payPrice").first("agentOrderStatus").as("agentOrderStatus").first("areaName").as("areaName").first("hopeCity").as("hopeCity").first("hopeStartTime").as("hopeStartTime").first("totalCustomerNum").as("totalCustomerNum").first("notMatchCustomerNum").as("notMatchCustomerNum"));sort = Sort.by(Sort.Direction.DESC, "notMatchCustomerNum");//按累计未分配客户数量排序operations.add(Aggregation.sort(sort));Aggregation aggregation = Aggregation.newAggregation(operations);AggregationResults<AgentOrderBcVo> aggregate = secondaryMongoTemplate.aggregate(aggregation, "agentOrderMo", AgentOrderBcVo.class);return aggregate.getMappedResults();}

其中first用法是,分组时对于多条数据取第一条的数据的相关字段
5、根据某个字段分组,对某个字段求和以后,然后再筛选,类似于mysql的 select type, sum(price) as count from table group by type having count >10

    @Overridepublic List<String> filterByWeekAndMonthAndDay(String target, List<String> businessModels, String pastMonth, int monthNum,int weekNum,int dayNum,List<String> agentIds) {Aggregation aggregation = newAggregation(Aggregation.match(where("businessModel").in(businessModels).and("pastMonth").is(pastMonth).and("target").is(target).and("agentId").in(agentIds).and("isDeleted").is(false)),Aggregation.group("agentId").first("agentId").as("agentId").sum("thisMonthNum").as("monthMatchSumNum").sum("thisWeekNum").as("weekMatchSumNum").sum("todayNum").as("dayMatchSumNum"),Aggregation.match(where("monthMatchSumNum").lt(monthNum).and("weekMatchSumNum").lt(weekNum).and("dayMatchSumNum").lt(dayNum)));AggregationResults<AgentIdAndMatchNumBean> aggregate = secondaryMongoTemplate.aggregate(aggregation, ResDacMatchAgentWeightMo.class, AgentIdAndMatchNumBean.class);if (EmptyUtils.isNotEmpty(aggregate)) {List<AgentIdAndMatchNumBean> results = aggregate.getMappedResults();return results.stream().map(AgentIdAndMatchNumBean::getAgentId).collect(Collectors.toList());}return null;}

6、match, group,sort,limit一起使用

    @Overridepublic List<AgentWeightBean> findSortByAgentIds(List<String> agentIds, List<String> targets, List<String> targetExtras, String businessModel, String pastMonth, int limit) {Aggregation aggr = newAggregation(match(where("agentId").in(agentIds).and("businessModel").is(businessModel).and("pastMonth").is(pastMonth).orOperator(EmptyUtils.isNotEmpty(targets) ? Criteria.where("target").in(targets) : Criteria.where("target").is(""),EmptyUtils.isNotEmpty(targetExtras) ? Criteria.where("targetExtra").in(targetExtras) : Criteria.where("targetExtra").is("")).and("isDeleted").is(false)),group("agentId").first("agentId").as("agentId").sum("weight").as("weight"),sort(Sort.by(Sort.Direction.DESC,"weight")),limit(limit));AggregationResults<AgentWeightBean> results = secondaryMongoTemplate.aggregate(aggr, ResDacMatchAgentWeightMo.class,AgentWeightBean.class);return results.getMappedResults();}

7、更新操作

    @Overridepublic void updateTarget(String agentId, List<String> targets, List<String> targetExtras, String businessModel, String pastMonth) {Query query = query(where("agentId").is(agentId).and("businessModel").is(businessModel).and("pastMonth").is(pastMonth).orOperator(EmptyUtils.isNotEmpty(targets) ? Criteria.where("target").in(targets) : Criteria.where("target").is(""),EmptyUtils.isNotEmpty(targetExtras) ? Criteria.where("targetExtra").in(targetExtras) : Criteria.where("targetExtra").is("")).and("isDeleted").is(false));Update update =  update("updateTime",LocalDateTime.now())//inc是自增操作,原子性操作.inc("todayNum",1).inc("thisWeekNum",1).inc("twoWeekNum",1).inc("thisMonthNum",1).inc("weight",-0.08);secondaryMongoTemplate.updateMulti(query,update,ResDacMatchAgentWeightMo.class);}

8、聚合查询时对多个字段进行运算符操作,比如 sum,divide

    @Overridepublic List<ReportAgentBean> getReportDataByAId(String aId, String aIdType, String reportType, String reportDate) {Query query = new Query();Criteria criteria = new Criteria();criteria.and("aIdType").is(aIdType);criteria.and("reportType").is(reportType);criteria.and("aId").is(aId);criteria.and("reportDate").is(reportDate);query.addCriteria(criteria);Aggregation aggregation = newAggregation(//project表示需要用到那些字段,返回那些字段Aggregation.project(PROJECT_FIELDS)//总标化保费.and(this.totalCriterionAmountExpression()).as("totalCriterionAmount")//成交服务单均保费.and(this.averageIssueAmountExpression()).as("averageIssueAmount")//件均保费.and(this.averageAmountExpression()).as("averageAmount").and(this.totalAmountExpression()).as("totalAmount").and(this.pmAgentNumRateExpression()).as("pmAgentNumRate"),Aggregation.match(criteria),Aggregation.sort(Sort.by(Sort.Direction.DESC, "totalCriterionAmount")));AggregationResults<ReportAgentBean> results = mongoTemplate.aggregate(aggregation, ReportAgentDataMo.class, ReportAgentBean.class);return results.getMappedResults();}private static final String[] PROJECT_FIELDS = {"id", "aIdType", "aId", "reportDate", "reportType", "advanceCriterionAmountDacT", "advanceNumDacT","advanceAmountDacT", "buyCustDacT", "giveCustDacT", "matchDacT", "upToStandardNum","pmDacT", "nonPmDacT", "policyConfirmNumDacT", "policyConfirmOrderNumDacT","upToStandardAgentNum", "dealInternetAmountDacT", "dealLifeAmountDacT","dealLifeCriterionAmountDacT", "dealHighAmountDacT", "dealCarAmountDacT", "dealGroupAmountDacT","dealHighCriterionAmountDacT", "dealCarCriterionAmountDacT", "dealGroupCriterionAmountDacT", "digitalAgentNum","dealInternetNumDacT", "dealLifeNumDacT", "dealHighNumDacT", "dealCarNumDacT", "cashCoupon", "cashCouponAmount","dealGroupNumDacT", "createTime"};//totalCriterionAmountExpression这个方法返回的数据5个字段相加后的结果private AggregationExpression totalCriterionAmountExpression() {return ArithmeticOperators.Add.valueOf("dealInternetAmountDacT").add("dealHighCriterionAmountDacT").add("dealCarCriterionAmountDacT").add("dealGroupCriterionAmountDacT").add("dealLifeCriterionAmountDacT");}//averageIssueAmountExpression这个方法会拿到totalCriterionAmountExpression方法的返回值然后和policyConfirmNumDacT字段相除private AggregationExpression averageIssueAmountExpression() {AggregationExpression totalCriterionAmount = this.totalCriterionAmountExpression();return ConditionalOperators.when(new Criteria("policyConfirmNumDacT").ne(0)).thenValueOf(ArithmeticOperators.Divide.valueOf(totalCriterionAmount).divideBy("policyConfirmNumDacT")).otherwise(0);}

9、聚合查询时的分页查询

    @Overridepublic List<ReportAgentBean> digitalAgentQuery(PageMsg pageMsg) {Criteria criteria = new Criteria();criteria.and("aIdType").is(AIdTypeEnum.agent.name());criteria.and("reportType").is(ReportTypeEnum.TOTAL.type);//累计服务单数 大于等于30criteria.and("digitalSvNum").gte(DigitalLevelEnum.digital_1.matchDacT);//标化总保费大于 5Wcriteria.and("digitalPolicyPerformance").gte(DigitalLevelEnum.digital_1.totalCriterionAmount);//累计成交订单数 大于5criteria.and("digitalTurnoverPerformance").gte(DigitalLevelEnum.digital_1.policyConfirmNumDacT);Aggregation aggregation = newAggregation(Aggregation.match(criteria),Aggregation.project(DIGITAL_FIELDS)//总标化保费.and("digitalPolicyPerformance").as("totalCriterionAmount").and("digitalSvNum").as("matchDacT").and("digitalTurnoverPerformance").as("policyConfirmNumDacT"),Aggregation.sort(Sort.by(Sort.Direction.DESC, "totalCriterionAmount")),Aggregation.skip((long) (pageMsg.getPageNum() - 1) * pageMsg.getPageSize()),Aggregation.limit(pageMsg.getPageSize()));AggregationResults<ReportAgentBean> results = mongoTemplate.aggregate(aggregation, ReportAgentDataMo.class, ReportAgentBean.class);return results.getMappedResults();}

相关文章:

Mongo常用语法(java代码)

1、根据agentId字段分组&#xff0c;并对totalCustomerNum、refundCustomerNum字段 sum求和&#xff0c;同时取别名 Overridepublic List<AgentCountInfoBean> selectCurrentMonthNewResource(Set<String> orderTypeSet, List<String> agentIds,LocalDateTim…...

go语言后端开发学习(二)——基于七牛云实现的资源上传模块

前言 在之前的文章中我介绍过我们基于gin框架怎么实现本地上传图片和文本这类的文件资源(具体文章可以参考gin框架学习笔记(二) ——相关数据与文件的响应)&#xff0c;但是在我们实际上的项目开发中一般却是不会使用本地上传资源的方式来上传的&#xff0c;因为文件的上传与读…...

探索微软新VLM Phi-3 Vision模型:详细分析与代码示例

引言 在最近的微软Build大会上&#xff0c;微软宣布了许多新内容&#xff0c;其中包括新款Copilot PC和围绕Copilot生态系统的一系列功能。其中最引人注目的是发布了一些新的Phi模型&#xff0c;特别是Phi-3 Vision模型。本文将详细探讨Phi-3 Vision模型的特性&#xff0c;并提…...

如何使用GPT-4o函数调用构建一个实时应用程序?

本教程介绍了如何使用OpenAI最新的LLM GPT-4o通过函数调用将实时数据引入LLM。 我们在LLM函数调用指南(详见https://thenewstack.io/a-comprehensive-guide-to-function-calling-in-llms/)中讨论了如何将实时数据引入聊天机器人和代理。现在&#xff0c;我们将通过将来自Fligh…...

[Vue-常见错误]浏览器显示Uncaught runtime errors

文章目录 错误描述正确写法具体如下 错误描述 当前端代码发生错误时&#xff0c;浏览器中出现以下错误提示。 正确写法 显然这不是我们所期望的&#xff0c;在vue.config.js中配置如下设置关闭Uncaught runtime errors显示 devServer: {client: {overlay: false}具体如下 …...

html常见的表单元素有哪些,html表单元素有哪些?

HTML中常用的表单元素包括&#xff1a;文本区域(TEXTAREA)&#xff0c;列表框(SELECT)&#xff0c;文本输入框(INPUT typetext)&#xff0c;密码输入框(INPUT typepassword)&#xff0c;单选输入框(INPUT typeradio)&#xff0c;复选输入框(INPUT typecheckbox)&#xff0c;重置…...

spring boot sso

代码&#xff1a;https://gitee.com/forgot940629/ssov2 授权服务 登录成功后&#xff0c;session中会存储UsernamePasswordAuthenticationToken&#xff0c;之后每次请求code时都会用UsernamePasswordAuthenticationToken生成OAuth2Authentication&#xff0c;并将OAuth2Aut…...

Keras深度学习框架实战(5):KerasNLP使用GPT2进行文本生成

1、KerasNLP与GPT2概述 KerasNLP的GPT2进行文本生成是一个基于深度学习的自然语言处理任务&#xff0c;它利用GPT-2模型来生成自然流畅的文本。以下是关于KerasNLP的GPT2进行文本生成的概述&#xff1a; GPT-2模型介绍&#xff1a; GPT-2&#xff08;Generative Pre-trained …...

速盾:网站重生之我开了高防cdn

在互联网的广袤海洋中&#xff0c;网站就如同一个个独立的岛屿&#xff0c;面临着各种风雨和挑战。而作为一名专业程序员&#xff0c;我深知网站安全和性能的重要性。当我的网站遭遇频繁的攻击和访问压力时&#xff0c;我毅然决定开启高防 CDN&#xff0c;开启了一场网站的重生…...

【spark】spark列转行操作(json格式)

前言&#xff1a;一般我们列转行都是使用concat_ws函数或者concat函数&#xff0c;但是concat一般都是用于字符串的拼接&#xff0c;后续处理数据时并不方便。 需求&#xff1a;将两列数据按照设备id进行分组&#xff0c;每个设备有多个时间点位和对应值&#xff0c;将其一一对…...

记录一次Linux启动kafka后并配置了本地服务连接远程kafka的地址后依旧连接localhost的问题

问题的原因 我是使用docker来安装并启动kafka 的&#xff0c;所以在启动过程中并没有太多需要配置的地方&#xff0c;基本都是从网上照搬照抄&#xff0c;没动什么脑子&#xff0c;所以看着启动起来了觉得就没事了&#xff0c;但是运行项目的时候发现&#xff0c;我明明已经配…...

MacOS中Latex提示没有相关字体怎么办

在使用mactex编译中文的时候&#xff0c;遇到有些中文字体识别不到的情况&#xff0c;例如遇到识别不到Songti.ttc。其实这个时候字体是在系统里面的&#xff0c;但是只不过是latex没有找到正确的字体路径。 本文只针对于系统已经安装了字体库并且能够用find命令搜到&#xff0…...

物资材料管理系统建设方案(Word)—实际项目方案

二、 项目概述 2.1 项目背景 2.2 现状分析 2.2.1 业务现状 2.2.2 系统现状 三、 总体需求 3.1 系统范围 3.2 系统功能 3.3 用户分析 3.4 假设与依赖关系 四、 功能需求 4.4.11.7 非功能性需求 五、 非功能性需求 5.1 用户界面需求 5.2 软硬件环境需求 5.3 产品质量需求 5.4 接口…...

!力扣102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] /*** Definition for…...

Vue3 + TS + Antd + Pinia 从零搭建后台系统(一) 脚手架搭建 + 入口配置

简易后台系统搭建开启&#xff0c;分几篇文章更新&#xff0c;本篇主要先搭架子&#xff0c;配置入口文件等目录 效果图一、搭建脚手架&#xff1a;二、处理package.json基础需要的依赖及运行脚本三、创建环境运行文件四、填充vue.config.ts配置文件五、配置vite-env.d.ts使项目…...

中国同胞进来看看,很多外国人想通过CSDN坑咱们中国人

地址&#xff1a;【诈骗离你我很近】中国同胞进来看看国外诈骗新套路。-CSDN博客...

Web前端电话咨询:深度解析与实用指南

Web前端电话咨询&#xff1a;深度解析与实用指南 在数字化时代&#xff0c;Web前端技术日新月异&#xff0c;对于许多企业和个人而言&#xff0c;通过电话咨询了解前端技术的最新动态和解决方案已成为一种高效且便捷的方式。本文将从四个方面、五个方面、六个方面和七个方面&a…...

使用python绘制季节图

使用python绘制季节图 季节图效果代码 季节图 季节图&#xff08;Seasonal Plot&#xff09;是一种数据可视化图表&#xff0c;用于展示时间序列数据的季节性变化。它通过将每个时间段&#xff08;如每个月、每个季度&#xff09;的数据绘制在同一张图表上&#xff0c;使得不同…...

VS2019专业版 C#和MFC安装

1. VS2019专业版下载地址 https://learn.microsoft.com/en-us/visualstudio/releases/2019/history 2.安装 C# 部分 MFC部分...

spring入门aop和ioc

文章目录 spring分层架构表现层服务层&#xff08;业务层&#xff09;持久层 spring核心ioc&#xff08;控制反转&#xff09;1)**接下来是代码示例&#xff1a;**2)**ioc容器的使用过程**3)ioc中的bean管理4)实例化bean的三种方式 aop&#xff08;面向切面开发&#xff09; 定…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...