一开始的写法如下(简写,凸显问题),聚合查出的数据都为空,数量为零
String startTime = "2021-08-30 00:00:00";
String endTime = "2021-09-30 00:00:00";
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.project("sTime").andExpression("substr(sTime,0,10)").as("day"),
Aggregation.match(Criteria.where("sId").is(1)
.and("sTime").gte(startTime).lt(endTime)),
Aggregation.group("day")
AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, MONGO_TABLE_NAME, Map.class);
results.getMappedResults().forEach(System.out::println);
List<Map> mapList = results.getMappedResults();
System.out.println("数量:"+mapList.size());
修改为如下代码解决:
String startTime = "2021-08-30 00:00:00";
String endTime = "2021-09-30 00:00:00";
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("sId").is(1)
.and("sTime").gte(startTime).lt(endTime)),
//将.project() 放到 .match() 条件后
Aggregation.project("sTime").andExpression("substr(sTime,0,10)").as("day"),
Aggregation.group("day")
AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, MONGO_TABLE_NAME, Map.class);
results.getMappedResults().forEach(System.out::println);
List<Map> mapList = results.getMappedResults();
System.out.println("数量:"+mapList.size());
-
mongo没有像mysql一样存在子查询的概念
-
mongo有管道的概念,也可以把管道理解成mysql中子查询
-
Aggregation相当于一个管道,需要从上至下将处理结果传递下去,如果直接将project放到match前边后,project中需要的sTime参数将得不到赋值,通过打印的mongo语句可以看到sTime=1(这个应该是未知参数的默认值),所以导致每次查询都为空
打印mongo语句日志,配置文件中添加如下配置:
logging.level.org .springframework.data.mongodb.core= DEBUG
目的:按天对数据进行分组问题:一开始的写法如下(简写,凸显问题),聚合查出的数据都为空,数量为零String startTime = "2021-08-30 00:00:00";String endTime = "2021-09-30 00:00:00";Aggregation aggregation = Aggregation.newAggregation( Aggregation.project("sTime").andExpression("substr(sTime
1.使用
mongo
的正则匹配实现
官方文档如下:
https://docs.
mongodb
.com/manual/reference/operator/query/regex/#pcre-vs-
java
script
2.针对mong-dirver的fiter结构
mongo
-driver包
“go.
mongodb
.org/
mongo
-driver/bson/primitive”
// 其中key替换成要模糊查询的字段名,value替换成输入的要模糊查询的字符串。然后把filter传入查询函数即可
// op
MongoDB
中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
下表展示了一些聚合的表达式:
计算总和。
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
计算平均值
db.my.
参数说明:sql(Operators)
where ($match) 、group by ($group)、having($match)、select($
project
)、order by($sort)、limit($limit)
sum($sum)、count($sum)、join($lookup)
*
project
:列出所有本次查询的字段,包括查询条件的字段和需要搜索的字段;
* match:搜索条件criteria
* un...
本文为个人在实际项目使用过程中实现复杂查询功能的一些经验积累,不足之处,还望不吝赐教。
mongo
-go-driver是
mongo
官方推出的golang语言的驱动程序,github地址:https://github.com/
mongodb
/
mongo
-go-driver
Bson简介
在开始介绍如何实现复杂查询之前,我们有必要先熟悉下BSON。
JSON文档在
MongoDB
里面以二进制形式存储, 被称作BSON(二进制编码的JSON)。和其它的数据库保存JSON数据为简单的字符串和数字, BSON扩展了JS
<insert id="addTerm" parameterType="String">
insert ignore into term(term) VALUES (#{term})
</insert>
然后,数据库表:
简单的不能再简单的一张表:解释一下,id...
大写字母:^[A-Z]{"+min+","+max+"}$
特殊符号:^(\\W){"+min+","+max+"}$
数字+小写字母:^(?![0-9]+$)(?!a-zA-Z]+$)[0-9a-z]{"+min+","+max+"}$
数字+大写字母:^(?![0-9]+$)(?!a-zA-Z]+$)[0-9A-Z]{"+
18:40:24.282 [com.alibaba.nacos.client.Worker.longPolling.fixed-localhost_8848] ERROR c.a.n.c.c.h.ServerHttpAgent - [httpPost,166] - [NACOS ConnectException httpPost] currentServerAddr: http://localhost:8848, err : Connection refused: connect
var f = $("#add_frm");//获取表单对象,对应html标签中的id
$.post("user/add",
// data:f.serialize(), //错误时候的代码
f.serialize() //正确时候的代码
,function(data){
$.messager.alter("",data,"info")
mongo
-2.5.3.jar是
MongoDB
Java
驱动程序的JAR文件。
MongoDB
是一种流行的开源文档数据库,而
mongo
-2.5.3.jar是其官方的
Java
驱动程序,用于在
Java
应用程序中连接和操作
MongoDB
数据库。
使用
mongo
-2.5.3.jar可以让
Java
开发者使用
MongoDB
提供的功能,如文档存储、查询、索引和聚合操作等。这个JAR文件包含了
MongoDB
Java
驱动程序的所有必要类和方法,可以通过在
Java
应用程序的类路径中引入这个文件来开始在
Java
应用程序中使用
MongoDB
。
对于开发人员来说,使用
mongo
-2.5.3.jar可以实现
Java
应用程序与
MongoDB
数据库的无缝集成,从而可以利用
MongoDB
的强大功能和性能优势,同时通过
Java
语言的特性来实现应用程序开发和数据操作。
为了使用
mongo
-2.5.3.jar,开发人员需要在他们的
Java
项目中将这个JAR文件引入,并设置好对
MongoDB
数据库的连接信息。然后就可以使用驱动程序提供的API来执行文档的插入、更新、删除和查询等操作。
总之,
mongo
-2.5.3.jar是
MongoDB
Java
驱动程序的JAR文件,它为
Java
开发人员提供了连接和操作
MongoDB
数据库的接口,帮助他们轻松地利用
MongoDB
的功能来开发强大的
Java
应用程序。