Word生成图表(柱状图、线形图等,并附带表格展示数值)

说明

Java poi实现生成图表并附带表格数据展示

一、效果图与模板

1、模板
在这里插入图片描述

2、效果图
在这里插入图片描述

二、Word生成图标与报表工具类

1.工具类

代码如下:

package com.ml.module.file.util.wordchart;import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.ml.module.file.domain.entity.ChartType;
import com.ml.support.dto.ChartData;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
import org.apache.poi.xddf.usermodel.chart.XDDFDataSource;
import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.xmlbeans.XmlCursor;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;/*** word图表模板与table工具类* 根据图表模板以及动态生成表格工具类*/
public class WordChartTplAndTableUtils {private static final BigDecimal bd2 = new BigDecimal("2");/*** 替换图表模板以及生产动态表格*/public static void replaceChartTplAndCreateTable(XWPFDocument doc, List<WordTplDataSourceInput> charItems) {Map<String, TableDataSourceInput> inputMap = Maps.newHashMap();Map<String, POIXMLDocumentPart> chartsMap = getChartsMap(doc);//获取模板的图表AtomicInteger ao = new AtomicInteger(1);charItems.forEach(data -> {TableDataSourceInput table = new TableDataSourceInput();int sortNum = ao.getAndIncrement();table.setTextParam("table" + sortNum);POIXMLDocumentPart documentPart = chartsMap.get("/word/charts/chart" + sortNum + ".xml");switch (data.getChartType()) {case REPORT:table.setHeaders(data.getHeaders());table.setDataSource(data.getDataSource());break;default:setChartData((XWPFChart) documentPart, data.getTitle(), data.getCharts());}/*** 1、标题值为paramColTitle+data里的group的值,作为标题* 2、每一行的数据为,按data里的name进行分组,然后根据headers进行拼装*/if (data.getChartType() != ChartType.REPORT) {List<String> titleArr = data.getCharts().stream().map(ChartData::getGroup).distinct().collect(Collectors.toList());List<List<String>> dataSource = Lists.newArrayList();Map<String, List<ChartData>> maps = data.getCharts().stream().collect(Collectors.groupingBy(ChartData::getName, LinkedHashMap::new, Collectors.toList()));maps.forEach((k, v) -> {List<String> dataItems = Lists.newArrayList();dataItems.add(k);//根据分组获取Map<String, BigDecimal> groupMap = v.stream().collect(Collectors.toMap(ChartData::getGroup, ChartData::getXxxValue));titleArr.forEach(group -> {Object val = MapUtils.getObject(groupMap, group);dataItems.add(Objects.isNull(val) ? "" : val.toString());});dataSource.add(dataItems);});titleArr.add(0, data.getParamColTitle());table.setHeaders(titleArr);table.setDataSource(dataSource);}inputMap.put(table.getTextParam(), table);});doParagraphs(doc, inputMap); // 处理段落文字数据,包括文字和表格、图片}/*** 处理图表* 获取word模板中的所有图表元素,用map存放* 为什么不用list保存:查看doc.getRelations()的源码可知,源码中使用了hashMap读取文档图表元素,* 对relations变量进行打印后发现,图表顺序和文档中的顺序不一致,也就是说relations的图表顺序不是文档中从上到下的顺序*/private static Map<String, POIXMLDocumentPart> getChartsMap(XWPFDocument doc) {Map<String, POIXMLDocumentPart> chartsMap = new HashMap<>();//动态刷新图表List<POIXMLDocumentPart> relations = doc.getRelations();for (POIXMLDocumentPart poixmlDocumentPart : relations) {if (poixmlDocumentPart instanceof XWPFChart) {  // 如果是图表元素String str = poixmlDocumentPart.toString();System.out.println("str:" + str);String key = str.replaceAll("Name: ", "").replaceAll(" - Content Type: application/vnd\\.openxmlformats-officedocument\\.drawingml\\.chart\\+xml", "").trim();System.out.println("key:" + key);chartsMap.put(key, poixmlDocumentPart);}}System.out.println("\n图表数量:" + chartsMap.size() + "\n");return chartsMap;}/*** 设置图标数据** @param chart         模板图标* @param chartTitle    图标标题* @param chartDataList --》String[] series, String[] categories, Double[] values1, Double[] values2*/private static void setChartData(XWPFChart chart, String chartTitle, List<ChartData> chartDataList) {if (CollectionUtils.isEmpty(chartDataList)) {//当传入的值为空时,暂时改为如下chartDataList.add(ChartData.of("无", "无", BigDecimal.ZERO));}final List<XDDFChartData> data = chart.getChartSeries();XDDFChartData bar = data.get(0);/*************设计数据源(Excel格式)开始**************/String[] series = chartDataList.stream().map(ChartData::getGroup).distinct().toArray(String[]::new);String[] categories = chartDataList.stream().map(ChartData::getName).distinct().toArray(String[]::new);final int numOfPoints = categories.length;//获取数据区间--》如:Sheet1!$A$2:$A$9final String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0));//第一列固定为分类final XDDFDataSource<?> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 0);AtomicInteger ao = new AtomicInteger(1);//每一列代表一个序列for (String ser : series) {// 假设不包含分类序列int aoNum = ao.getAndIncrement();String valuesDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, aoNum, aoNum));Map<String, BigDecimal> valueMap = chartDataList.stream().filter(i -> ser.equals(i.getGroup())).collect(Collectors.toMap(ChartData::getName, ChartData::getXxxValue));Double[] values = getValues(categories, valueMap);XDDFNumericalDataSource<? extends Number> valuesData = XDDFDataSourcesFactory.fromArray(values, valuesDataRange, aoNum);if (aoNum == 1) {XDDFChartData.Series series1 = bar.getSeries().get(0);series1.replaceData(categoriesData, valuesData);// 替换series1.setTitle(ser, chart.setSheetTitle(ser, 0));} else {XDDFChartData.Series series2 = bar.addSeries(categoriesData, valuesData);// 添加series2.setTitle(ser, chart.setSheetTitle(ser, aoNum));}}chart.plot(bar);// 绘制(图表)chart.setTitleText(chartTitle); // https://stackoverflow.com/questions/30532612chart.setTitleOverlay(false);}/*** 1、值的顺序怎么保证呢???* 2、为空的值,是否能忽略???*/private static Double[] getValues(String[] categories, Map<String, BigDecimal> valueMap) {List<Double> result = Lists.newArrayList();for (String cate : categories) {result.add(valueMap.getOrDefault(cate, BigDecimal.ZERO).doubleValue());}return result.toArray(new Double[0]);}/********************动态表格开始****************************//*** 处理段落文字*/private static void doParagraphs(XWPFDocument doc, Map<String, TableDataSourceInput> inputMap) {List<XWPFParagraph> paragraphList = doc.getParagraphs();if (paragraphList != null && paragraphList.size() > 0) {for (XWPFParagraph paragraph : paragraphList) {List<XWPFRun> runs = paragraph.getRuns();for (XWPFRun run : runs) {String text = run.getText(0);if (!Strings.isNullOrEmpty(text)) {String param = StringUtils.substringBetween(text, "{", "}");if (inputMap.containsKey(param)) {TableDataSourceInput input = (TableDataSourceInput) MapUtils.getObject(inputMap, param);createTable(doc, paragraph, run, input.headers, input.dataSource);}}}}}}// 动态表格private static void createTable(XWPFDocument doc, XWPFParagraph paragraph, XWPFRun run, List<String> headers, List<List<String>> dataSource) {run.setText("", 0);XmlCursor cursor = paragraph.getCTP().newCursor();XWPFTable tableOne = doc.insertNewTbl(cursor);// ---这个是关键// 设置表格宽度,第一行宽度就可以了,这个值的单位,目前我也还不清楚,还没来得及研究tableOne.setWidth(8500);// 表格第一行,对于每个列,必须使用createCell(),而不是getCell(),因为第一行嘛,肯定是属于创建的,没有create哪里来的get呢XWPFTableRow tableOneRowOne = tableOne.getRow(0);//行AtomicInteger ao = new AtomicInteger(1);int num = headers.size();if (num == 0) return;int width = 100 / num;headers.forEach(i -> {if (ao.getAndIncrement() == 1)setWordCellSelfStyle(tableOneRowOne.getCell(0), "微软雅黑", "9", 0, "left", "top", "#000000", "#FFFFFF", "" + width + "%", i);elsesetWordCellSelfStyle(tableOneRowOne.createCell(), "微软雅黑", "9", 0, "left", "top", "#000000", "#FFFFFF", "" + width + "%", i);});// 动态添加数据dataSource.forEach(row -> {AtomicInteger pos = new AtomicInteger(0);XWPFTableRow tableOneRowTwo = tableOne.createRow();//行row.forEach(coll -> setWordCellSelfStyle(tableOneRowTwo.getCell(pos.getAndIncrement()), "微软雅黑", "9", 0, "left", "top", "#000000", "#FFFFFF", "" + width + "%", coll));});}/*** 设置表格样式*/private static void setWordCellSelfStyle(XWPFTableCell cell, String fontName, String fontSize, int fontBlod,String alignment, String vertical, String fontColor,String bgColor, String cellWidth, String content) {if (null == cell) return;//poi对字体大小设置特殊,不支持小数,但对原word字体大小做了乘2处理BigInteger bFontSize = new BigInteger("24");if (Strings.isNullOrEmpty(fontSize)) {//poi对字体大小设置特殊,不支持小数,但对原word字体大小做了乘2处理BigDecimal fontSizeBD = new BigDecimal(fontSize);fontSizeBD = bd2.multiply(fontSizeBD);fontSizeBD = fontSizeBD.setScale(0, BigDecimal.ROUND_HALF_UP);//这里取整bFontSize = new BigInteger(fontSizeBD.toString());// 字体大小}// 设置单元格宽度cell.setWidth(cellWidth);//=====获取单元格CTTc tc = cell.getCTTc();//====tcPr开始====》》》》CTTcPr tcPr = tc.getTcPr();//获取单元格里的<w:tcPr>if (tcPr == null) {//没有<w:tcPr>,创建tcPr = tc.addNewTcPr();}//  --vjc开始-->>CTVerticalJc vjc = tcPr.getVAlign();//获取<w:tcPr>  的<w:vAlign w:val="center"/>if (vjc == null) {//没有<w:w:vAlign/>,创建vjc = tcPr.addNewVAlign();}//设置单元格对齐方式vjc.setVal(vertical.equals("top") ? STVerticalJc.TOP : vertical.equals("bottom") ? STVerticalJc.BOTTOM : STVerticalJc.CENTER); //垂直对齐CTShd shd = tcPr.getShd();//获取<w:tcPr>里的<w:shd w:val="clear" w:color="auto" w:fill="C00000"/>if (shd == null) {//没有<w:shd>,创建shd = tcPr.addNewShd();}// 设置背景颜色shd.setFill(bgColor.substring(1));//《《《《====tcPr结束====//====p开始====》》》》CTP p = tc.getPList().get(0);//获取单元格里的<w:p w:rsidR="00C36068" w:rsidRPr="00B705A0" w:rsidRDefault="00C36068" w:rsidP="00C36068">//---ppr开始--->>>CTPPr ppr = p.getPPr();//获取<w:p>里的<w:pPr>if (ppr == null) {//没有<w:pPr>,创建ppr = p.addNewPPr();}//  --jc开始-->>CTJc jc = ppr.getJc();//获取<w:pPr>里的<w:jc w:val="left"/>if (jc == null) {//没有<w:jc/>,创建jc = ppr.addNewJc();}//设置单元格对齐方式jc.setVal(alignment.equals("left") ? STJc.LEFT : alignment.equals("right") ? STJc.RIGHT : STJc.CENTER); //水平对齐//  <<--jc结束--//  --pRpr开始-->>CTParaRPr pRpr = ppr.getRPr(); //获取<w:pPr>里的<w:rPr>if (pRpr == null) {//没有<w:rPr>,创建pRpr = ppr.addNewRPr();}CTFonts pfont = pRpr.getRFonts();//获取<w:rPr>里的<w:rFonts w:ascii="宋体" w:eastAsia="宋体" w:hAnsi="宋体"/>if (pfont == null) {//没有<w:rPr>,创建pfont = pRpr.addNewRFonts();}//设置字体pfont.setAscii(fontName);pfont.setEastAsia(fontName);pfont.setHAnsi(fontName);CTOnOff pb = pRpr.getB();//获取<w:rPr>里的<w:b/>if (pb == null) {//没有<w:b/>,创建pb = pRpr.addNewB();}//设置字体是否加粗pb.setVal(fontBlod == 1 ? STOnOff.ON : STOnOff.OFF);CTHpsMeasure psz = pRpr.getSz();//获取<w:rPr>里的<w:sz w:val="32"/>if (psz == null) {//没有<w:sz w:val="32"/>,创建psz = pRpr.addNewSz();}// 设置单元格字体大小psz.setVal(bFontSize);CTHpsMeasure pszCs = pRpr.getSzCs();//获取<w:rPr>里的<w:szCs w:val="32"/>if (pszCs == null) {//没有<w:szCs w:val="32"/>,创建pszCs = pRpr.addNewSzCs();}// 设置单元格字体大小pszCs.setVal(bFontSize);//  <<--pRpr结束--//<<<---ppr结束---//---r开始--->>>List<CTR> rlist = p.getRList(); //获取<w:p>里的<w:r w:rsidRPr="00B705A0">CTR r;if (rlist != null && rlist.size() > 0) {//获取第一个<w:r>r = rlist.get(0);} else {//没有<w:r>,创建r = p.addNewR();}//--rpr开始-->>CTRPr rpr = r.getRPr();//获取<w:r w:rsidRPr="00B705A0">里的<w:rPr>if (rpr == null) {//没有<w:rPr>,创建rpr = r.addNewRPr();}//->-CTFonts font = rpr.getRFonts();//获取<w:rPr>里的<w:rFonts w:ascii="宋体" w:eastAsia="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>if (font == null) {//没有<w:rFonts>,创建font = rpr.addNewRFonts();}//设置字体font.setAscii(fontName);font.setEastAsia(fontName);font.setHAnsi(fontName);CTOnOff b = rpr.getB();//获取<w:rPr>里的<w:b/>if (b == null) {//没有<w:b/>,创建b = rpr.addNewB();}//设置字体是否加粗b.setVal(fontBlod == 1 ? STOnOff.ON : STOnOff.OFF);CTColor color = rpr.getColor();//获取<w:rPr>里的<w:color w:val="FFFFFF" w:themeColor="background1"/>if (color == null) {//没有<w:color>,创建color = rpr.addNewColor();}// 设置字体颜色if (!Strings.isNullOrEmpty(content) && content.contains("↓")) {color.setVal("43CD80");} else if (!Strings.isNullOrEmpty(content) && content.contains("↑")) {color.setVal("943634");} else {color.setVal(fontColor.substring(1));}CTHpsMeasure sz = rpr.getSz();if (sz == null) {sz = rpr.addNewSz();}sz.setVal(bFontSize);CTHpsMeasure szCs = rpr.getSzCs();if (szCs == null) {szCs = rpr.addNewSz();}szCs.setVal(bFontSize);//-<-//<<--rpr结束--List<CTText> tlist = r.getTList();CTText t;if (tlist != null && tlist.size() > 0) {//获取第一个<w:r>t = tlist.get(0);} else {//没有<w:r>,创建t = r.addNewT();}t.setStringValue(Strings.isNullOrEmpty(content) ? "" : content);//<<<---r结束---}/********************动态表格结束****************************/
}

2.入参WordTplDataSourceInput

代码如下:

@Getter @Setter
public class WordTplDataSourceInput extends TableDataSourceInput {ChartType chartType = ChartType.BAR;//类型private String title;private List<ChartData> charts = Lists.newArrayList();private String paramColTitle;//参数列名称--》对应数据源(Excel)第一列的标题String textParam = "table1";//模板参数定义表格:最终格式为:${table1},只保留里面List<String> headers = Lists.newArrayList();// 标题/或表格头部List<List<String>> dataSource = Lists.newArrayList();
}

3.测试用例

代码如下:

public class ChartExampleService {@Testpublic void chart_example_test() throws Exception {final String fileInput = "C:\\file\\chart\\test\\line-chart-template.docx";  //try (FileInputStream argIS = new FileInputStream(fileInput)) {try (XWPFDocument doc = new XWPFDocument(argIS)) {// doc为模板文件WordChartTplAndTableUtils.replaceChartTplAndCreateTable(doc, mockData());// 保存返回try (OutputStream out = new FileOutputStream("C:\\file\\chart\\test\\line_chart-demo-output.docx")) {doc.write(out);}}System.out.println("Done");}}private List<WordTplDataSourceInput> mockData() {List<WordTplDataSourceInput> result = Lists.newArrayList();WordTplDataSourceInput input1 = new WordTplDataSourceInput();input1.setChartType(ChartType.BAR);input1.setCharts(chartData());input1.setTitle("请假统计分析");input1.setParamColTitle("年月");result.add(input1);return result;}/*** 数据集*/private List<ChartData> chartData() {List<ChartData> result = Lists.newArrayList();result.add(ChartData.of("测试-请假类型", "202001", BigDecimal.valueOf(4)));result.add(ChartData.of("测试-请假类型", "202002", BigDecimal.valueOf(4)));result.add(ChartData.of("测试-请假类型", "202003", BigDecimal.valueOf(3)));result.add(ChartData.of("请假测试类型", "202001", BigDecimal.valueOf(1.3)));result.add(ChartData.of("请假测试类型", "202002", BigDecimal.valueOf(2)));return result.stream().sorted(Comparator.comparing(ChartData::getGroup).thenComparing(ChartData::getName)).collect(Collectors.toList());}
}

参考官网例子

可以导POI官网查看相关资料,例子的网址为:
https://poi.apache.org/components/spreadsheet/examples.html#linked-dropdown

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

word中实现图表的自动编号功能

工作中&#xff0c;经常需要对图表进行编辑和编号&#xff0c;有的时候会涉及图表的顺序调整、增加或删除&#xff0c;刚刚调整好的图表的编号就会被打乱&#xff0c;有的时候还会漏调&#xff0c;从而导致即使耗费了大量的时间&#xff0c;图表的序号依然会出现问题&#xff0…

使用word代码域自动为图表 标号

当写一个比较几万字文档时&#xff0c;文章中可能会有很多 图表&#xff0c;而且下文引用上文的图表&#xff0c;手动敲的比较麻烦。 word的域是一个比较复杂的一个功能&#xff0c;今天通过word的代码域&#xff0c;提供两种方法来解决 自动为图生成图注&#xff0c;并引用&am…

Word图标显示异常空白解决方案

问题描述 最近使用电脑时突然发现桌面的word文档图标变成了空白&#xff0c;之前也遇到过这个问题&#xff0c;但一时想不起来之前是怎么解决的&#xff08;只记得是跟注册表相关&#xff09;&#xff0c;遂上网查找了一番&#xff0c;经过一两个小时折腾后终于解决了问题&…

用手机打开word图表位置很乱_9个工作中经常用到的Word技巧,能大大提升你的工作效率...

不管是职场小白还是职场大神&#xff0c;Word基本是我们都需要用到办公软件&#xff0c;所以今天跟大家分享9个超级实用的word技巧&#xff0c;学会了能让你的工作效率快到起飞&#xff0c;保姆级教程&#xff0c;一起来看看吧&#xff01; 1、不滚动鼠标快速翻到100页 文档第1…

电脑系统安装Word图标变成白色怎么恢复?

Win11 Word图标变成白色怎么恢复&#xff1f;有一些朋友发现自己电脑上的doc格式的word文档图标是白色的&#xff0c;这是怎么回事呢&#xff1f;出现这种情况应该如何解决&#xff1f;大家肯定要先确保电脑上有安装Office软件&#xff0c;今天给朋友们讲讲具体的解决方法&…

电脑桌面图标全部变成Word图标?

最近有用户发现自己的电脑桌面图标全部变成了Word文档图标&#xff0c;这是什么情况&#xff1f;到底是哪里出现了问题&#xff1f;针对这一问题&#xff0c;下面就由小编给大家分享桌面图标全部变成Word图标的解决办法。 操作步骤&#xff1a; 1、双击打开桌面的“计算机”。 …

POI Word 图表、柱状图、条形图、折线图、饼图

poi Excel 图表&#xff1a;https://blog.csdn.net/u014644574/article/details/105695787 1、pom.xml <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependenc…

我计算机桌面的word图标改变了咋办,桌面上word图标异常的处理方法

今天打开电脑&#xff0c;不知什么原因&#xff0c;所有word图标都变成了灰色&#xff0c;能正常打开&#xff0c;但看起来非常不舒服&#xff0c;怎样让他恢复原来的样子呢&#xff0c;学习啦小编采取了以下几个操作步骤来恢复&#xff0c;有需要的朋友可以来看看哦。 解决Wor…

Word 图表按章节自动编号

在撰写文章&#xff0c;我们通常会遇到需要这样的问题 如何自动对各个章节的标题进行自动编号&#xff1f; 如何按照章节对图表进行编号&#xff1f; 这一问题我也遇到了很多次&#xff0c;后来在网上找了一些资料&#xff0c;发现可以使用Word中自带的多级列表进行初步解决…

java poi word 图表_Java操作Poi--word图表中颜色的设置

在做java 动态增删图表中&#xff0c;如果将原来的标签数据删除了&#xff0c;在新增标签数据&#xff0c;发现颜色没设置&#xff0c;然后找不到对应的方法。 将word模板另外存word.xml格式&#xff0c;你会发现word模板其实是一大堆标签&#xff0c;你操作的是标签。然后打开…

如何在毕业论文Word中插入图表目录

前言&#xff1a;近来项目结题需要撰写结题报告&#xff0c;在Word中需要添加图表目录&#xff08;即按住Ctrl并单击可直接跳转到图表相应位置进行访问&#xff09;&#xff0c;回想起来自己本科毕设论文当中并没有添加图目录&#xff0c;显得稍逊一番&#xff0c;今进行简单教…

Word图表的中英题注及引用

大部分中文期刊都要求对使用到的图片和表格插入中英对照题注。以下是在word文档中的具体操作方法。 1、选中表格 2、“引用”–>“插入题注” 3、“新建标签”–>输入标签名称 4、“确定” 5、此时生成了英文题注 6、还有一个中文的题注&#xff0c;重复步骤2-4&…

Word 2010创建图表的详细操作流程

Word 2010中内置多种图表模板供用户选择使用&#xff0c;不仅如此&#xff0c;用户还可以根据自身需求创建自定义的图表模板&#xff0c;从而提高工作效率。 Word 2010创建图表的详细操作流程如下&#xff1a; 第1步&#xff0c;打开Word2010文档窗口&#xff0c;切换到“插入…

MongoDB数据查询

1、查询某个集合的所有&#xff1a; db.集合名称.find(); 或者 db.集合名称.find({}); MongoDB的集合名称相当于SQL的表名 如同SQL语句&#xff1a; SELECT * FROM TABLENAME 2、根据条件查询&#xff1a; db.集合名称.find({"column":"value1"})…

MongoDB的查询语法

1.查询 2.排序查询 sort() 方法对数据进行排序&#xff0c;sort() 方法可以通过参数指定排序的字段&#xff0c;并使用 1 和 -1 来指定排序的方式&#xff0c;其中 1 为升序排列&#xff0c;而 -1 是用于降序排列 3.分页列表查询 skip(), limilt(), sort()三个放在一起执行的时…

MongoDB中的数据查询

MongoDB中的查询大致上分为以下五种&#xff1a; 一、操作符查询&#xff1a; MongoDB中的操作符查询&#xff0c;其与RDBMS Where中的语句比较是这样的&#xff1a; 例如&#xff1a; db.demo.find({"score" : {$gt : 85}}) 其意思是查询数据库中成绩大于85分…

mongoDB聚合查询

管道 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。 聚合管道操作 可参考菜鸟文档&#xff1a;菜鸟文档 命令 功能描述 $project指定输出…

MongoDB的文档查询

MongoDB查询文档使用find()方法&#xff0c;find()方法以非结构化的方式来显示所有文档。 一、语法 db.集合名称.find(query,projection) quey&#xff1a;可选参数&#xff0c;使用查询操作符指定查询条件projection&#xff1a;可选参数&#xff0c;使用投影操作符指定返回…

【2023 · CANN训练营第一季】应用开发(初级)第五章——媒体数据处理

1.媒体数据处理 受网络结构和训练方式等因素的影响&#xff0c;绝大多数神经网络模型对输入数据都有格式上的限制。在计算机视觉领域&#xff0c;这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图或视频的尺寸、格式等与网络模型的要求不一致时&#xff0c;我们需…

【mongodb】查询mongodb的数据库存放路径

通过yum方式安装mongodb,我们需要了解mongodb实际存放数据的位置以及相关日志所在的文件&#xff0c;我们可以通过如下命令来了解: ps -ax | grep mongod 通过上面的输出&#xff0c;我们了解到Mongodb的配置使用的是/etc/mongod.conf文件&#xff0c;继而&#xff0c;我们可以…