导航:首页 > 编程语言 > javamongoaggregate

javamongoaggregate

发布时间:2023-05-30 06:30:37

A. java mongoDB怎么返回数组字段数组的指定索引的元素

mongodb中使用aggregate可以返回数组字段数组的指定索引的元素
参考语者宏句:
{$match:{'id':15}},
{$project:{id:1,"default":1}},
{$unwind:"$default.styles"},
{$match:{'default.styles.status':1}},
{$group:{_id:"$_id","defaults":{$push:"$default.styles"}}}
解核嫌游释:
1:改销过滤数据{$match:{'id':15}}
2:获取想要的列{$project:{id:1,"default":1}}
3:获取展开后数组字段{$unwind:"$default.styles"}
4:条件查询数组元素{$match:{'default.styles.status':1}}
5:分组后保存结果{$group:{_id:"$_id","defaults":{$push:"$default.styles"}}}

B. Mongodb Aggregation group()分组操作

Mongo的分组操作有两种方式: aggregate({$group:{}}) group()

{ $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } }

为必选字段,为被分组字段,可为空或null

为可选字段,其中可包含一下运算符:

1.仅分组,对issue_xjtf表中sp1,sp2进行分组

相当于sql

db.collection.group({ key, rece, initial [, keyf] [, cond] [, finalize] })
前三个是必备参数,“[]”中是可选参数

可以放用来分组的字段,并且会返回其中字段(group by 后面的字段)

是在分组操作期间对文档进行操作的聚合函数。可以返回总和或计数。该函数有两个参和态数:当前文档;该组的聚合结果文档。

对唤让源结果中文档,字段进行初始化

对数据筛选的条件,相当于where

1. count :取xbgi表中,article_pubdate值大于2000-01-01的数据,并分组计数

2. max :取sjwd表中,ric_publication_coden为9529a8f7-3eef-431a-a0cd-e49d601417df,用article_year分组计数,滑毁取其最晚日期。

3. sum :在表total_journal_issue中以journal_id分组,并获取article_count总数

用Navicat 执行group()时,分组值超过20000,会报如下错误(未检测具体原因):

C. MongoDB Aggregate $project中,如果想新加一列常数,如何写

不知道报的什么错,我没用过C#的driver,但是我感觉C#的人不像javascript的人那样爱用不确定数量的参数,所以我想C#的Aggregate方法接受的参数应该是数组、IList或者IEnumerable之类的东西吧,你试试:

AggregateResultresult=books.Aggregate(new[]{query});

之类的看看行不行。

D. java mongo连接问题,一直超时,原因不知道在哪

在对超过百万条记录的集合进行聚合操作。御扒
DBObject match=(DBObject)JSON.parse("{$match:{logType:{'$in':[5,9]}}}"); DBObject group=(DBObject)JSON.parse("{$group:{'_id':'$domainUrl','count':{'$sum':1}}}"); AggregationOutput output = logCollection.aggregate(match,group);

偶尔会发生Read timed out 异常。
com.mongodb.MongoException$Network: Read operation to server /192.168.10.202:27017 failed on database adLogTable at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:253) at com.mongodb.DB.command(DB.java:261) at com.mongodb.DB.command(DB.java:243) ... Caused by: java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152)

通过多次测试,发现执行一次聚合平均时间为5s,超过5s时就会报错!
然后查看MongoDB的配置信息:
socket-timeout="5000" //5s

socket-timeout的默认配置为0,也就是没有限制。
没有超时限制,系统出了问题也不容易发现,应该根派首据实际情况,给出合理镇羡昌的超时时间。
通过多次测试发现最长执行时间为6秒,就把超时时间设置成了10000。

E. Java对mongodb进行正则查询

用Java实现MongoDB正则查询小技巧:
//模糊查询
private BasicDBObject getLikeStr(String findStr) {
Pattern pattern = Pattern.compile("^.*" + findStr + ".*$", Pattern.CASE_INSENSITIVE);
return new BasicDBObject("$regex", pattern);
}
DBObject query = new BasicDBObject();
query.put("real_name", getLikeStr(userName));

//endWith文件扩展名
private BasicDBObject endWithStr(String findStr) {
Pattern pattern = Pattern.compile(findStr + "$", Pattern.MULTILINE);
return new BasicDBObject("$regex", pattern);
}
DBObject query = new BasicDBObject();
query.put("filename", endWithStr(“.pdf”));

F. SpringBoot整合MongoDB实战

MongoTemplate配置

一般情况下,按照如下配置,springboot会进行自动装配,但是如果需要实现一些自定义的功能,例如密码加解密,类型转换等功能需要手写配置MongoTemplate。

@EnableMongoRepositories()表示支持Spring JPA,即通过规范命名的接口来实现简单的DB操作,不需要自己写Query,可以通过该注解的value属性来指定注解的作用范围。
ReUtil是一个正则表达式的工具类,用于判断配置文件的格式是否正确,配置MongoDatabaseFactory过程中实现一个比较简单的配置文件解密的过程,解密方法用简单的字符串翻转来实现。
通过MappingMongoConverter来实现java中的对象与MongoDB中的Document进行一些复杂的映射,默认情况下一个java域对象存入MongoDB时会生成一个"_class"的key对应存储Java对象类型,通过

来取消每条记录生成一个"-class"的数据。
通过MappingMongoConverter实现一个简单的时间转化功能TimestampConverter,如下所示

还可以进行更加精细化的配置,例如

可以通过WritingConverter和ReadingConverter配置Document和Java对象相互转化。

MongoTemplate实战

例如一个博客系统,我们通过MongoDB存储用户的浏览记录,浏览记录的实体如下所示,

如上所示,每个人对应每篇文章有一条浏览记录,每次访问都会对访问次数viewCount进行+1操作.下文针对这个场景介绍MongoTemplate的基本操作。

这些操作用法基本一样,如下所示,传入一个封装查询条件的对象Query,Java中映射的对象entityClass和MongoDB中对应的Document的名称。

例如我们想要查询某个用户某篇博客的访问次数,我们只需要通过博客id和访问者构建查询条件进行查询即可。


findAndModify表示更新符合查询条件的记录,其方法如下所示,

Query封装查询条件,Update封装的是更新内容。例如用户每次刷新页面浏览次数会+1操作,我们可以使用findAndModify操作,如下所示

如上所示,首先判断用户是否存在访问记录,如果存在则通过Update对访问次数viewCount进行+1操作,若不存在访问记录则新建访问记录。


保存操作包括主要包括insert和save方法,这两个方法都没有返回值,同时两个方法有一些区别,


该方法如下所示,

注释说明该方法的功能是,如果存在与查询条件匹配的文档,则根据Update中的内容进行更新,如果不存在符合查询条件的内容,则根据查询条件和Update插入新的文档。


聚合查询 MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。本文侧重于Java实现。
结合上述中的访问记录的场景,如果我们需要统计某个博主某个专栏下面所有文章的访问记录,包括访问总人数,访问总次数,以及每个访客对应的访问次数详情,并且要满足分页需求,那么我们需要用到MongoDB的聚合操作,具体实现如下所示

总结
本文详细介绍了SpringBoot如何整合MongoDB,并且结合博客系统的访问记录展示了MongoTemplate的基本用法。

G. java mongodb多条件分组

//首先利$match筛选出where条件此处看你的查询范围条件了
BasicDBObject[]array={newBasicDBObject("startTimeLong",newBasicDBObject("$gte",beginTime)),
newBasicDBObject("startTimeLong",newBasicDBObject("$lt",endTime))};

BasicDBObjectcond=newBasicDBObject();
cond.put("$and",array);
DBObjectmatch=newBasicDBObject("$match",cond);

//利用$project拼装group需要的数据,包含name列、age列
DBObjectfields=newBasicDBObject("name",1);
fields.put("age",1);

DBObjectproject=newBasicDBObject("$project",fields);

//利用$group进行分组
DBObject_group=newBasicDBObject("name","$name");
_group.put("age","$age");
DBObjectgroupFields=newBasicDBObject("_id",_group);
//总数
groupFields.put("count",newBasicDBObject("$sum",1));
DBObjectgroup=newBasicDBObject("$group",groupFields);
AggregationOutputoutput=MongodbUtil.getLogInfoCollection().aggregate(match,project,group);

阅读全文

与javamongoaggregate相关的资料

热点内容
网络加载视频失败是怎么回事 浏览:805
传奇账号在哪个文件夹里 浏览:346
百度app在哪里安装 浏览:587
如何设置路由器网络不断网 浏览:471
传到qq群里的文件怎么删除 浏览:861
索尼安卓71更新日志 浏览:234
怎么找手机里的垃圾app 浏览:540
2015蓝桥杯代码填空 浏览:698
安卓数据库dbexecSQL 浏览:227
doc重命名文件格式 浏览:728
getscreen截图工具下载 浏览:719
共识数据是什么时候开始的 浏览:96
数码管显示电压程序 浏览:479
数据库文件有哪个 浏览:543
途强储存在哪个文件夹 浏览:172
如何恢复被覆盖文件 浏览:611
iphone5用哪个版本最好 浏览:327
extjsgrid禁用 浏览:426
如何查找国外论文的编程代码 浏览:366
暗金颜色代码 浏览:789

友情链接