问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

使用AggregationOptions作磁盘缓存,mongo版本为3.6.4,outputmode过时,请问这个如何解决?

发布网友 发布时间:2022-05-06 18:05

我来回答

3个回答

懂视网 时间:2022-05-06 22:26

mongo官网:http://www.mongodb.org/ 工作中使用到Mongo,但是没有系统的学习研究过Mongo,仅对工作过程中,在Mongo的使用过程中的一些知识点做一下记录,并随时补充,达到总结备忘的目的。 本篇主要终结记录聚合和查询。 聚合(aggregation) Count db.view

mongo官网:http://www.mongodb.org/

工作中使用到Mongo,但是没有系统的学习研究过Mongo,仅对工作过程中,在Mongo的使用过程中的一些知识点做一下记录,并随时补充,达到总结备忘的目的。

本篇主要终结记录聚合和查询。

聚合(aggregation)

Count

db.view_view.count()

db.view_view.count({_id:"521842"})

db.view_view.find().count()

db.view_view.find({_id:"521842"}).count()

Distinct

db.view_view.distinct("_id")

db.view_view.distinct("view") view是个数组,会把每个数组的元素都distinct一下

Group

db.invoke_stat.group({
 key:{ip:true},
 cond:{
 date:{$gte:ISODate("2014-07-09 16:00:00"),$lt:ISODate("2014-07-10 16:00:00")}
 },
 reduce:function(curr,result){
 result.count += curr.times;
 },
 initial:{count:0},
 finalize:function(result) {result.count = '$' + result.count}
});

db.view_view.group({
 keyf:function(doc){return {view_num:doc.view.length}},
 reduce:function(curr,result){
 result.count += 1;
 result.id = curr._id;
 },
 initial:{count:0}
});
关于以上两个group的解释:

key/keyf:要按照进行分组的列,key是直接选取表中的列,kef是一个函数,对列进行一些处理,函数结果要返回一个对象,比如{view_num:doc.view.length},doc.view.length,是表中的数组列view的长度。

cond:是要过滤的查询条件

reduce:处理函数

initial:返回列的初始值

finalize:对reduce的结果进行进一步处理,比如格式化

MapReduce

db.invoke_stat.mapReduce(
 function(){
 var key = this.ip;
 emit(key,{r_times:this.times})
 },
 function(key,emits){
 total=0;
 for(var k in emits) {
  total+=emits[k].r_times;
 }
 return {r_times:total}
 },
 {out:'mr'}
)
以上:r_times是我们定义的要返回的列的名称,ip和times是表中的列,mr是我们要把MapReduce的计算结果存入名称为mr的集合中。

mapReduce的原型为:function (map, reduce, optionsOrOutString),下面具体介绍一下函数的三个参数:

map函数,它会遍历集合中的每一个文档,this表示文档,它使用emit方法将文档按键分组,并返回需要统计的数据;

reduce函数,它将收集数据并统计,两个参数分别为map函数返回的key值和数据数组;

optionsOrOutString参数为一个对象,定义了一些额外工作,比如上面的列子中使用out参数将统计结果放入到mr集合中,集合不存在则创建,存在了则覆盖。

参数optionsOrOutString对象除了out键以外还有其它一些键:

finalize函数,同group的finalize完成器一样,可以对reduce的结果做一些处理;

query文档,在map函数前对文档过滤;

sort文档,在map函数前对文档排序,必须先对排序的字段建立索引;

limit整数,在map函数前设定文档数量;

scope文档,js函数中用到的变量,客户端可以通过scope传递一些值;

jsMode布尔,指定了map和reduce函数间传递的对象使用BSON格式还是javascript对象,默认值false,表示采用BSON格式,优点是中间的BSON数据会被存在硬盘上,所以传递的数据量可以很大,但会影响性能;采用javascript对象,性能较高,但只能传递50万个不同的key值;

verbos布尔,默认true,显示详细的时间统计信息。

以上可以看出MapReduce的强大,可以很轻松的实现不同的统计功能。

查询(Query)

mongo查询语法:

db.access_logs_140701.find({jxTime:{$gt:1407011300,$lt:1407011400},"curl.sku":"99978033"}).sort({jxTime:-1}).skip(1).limit(100)

db.invoke_stat.find({date:{$gte:ISODate("2014-07-09 10:00:00"),$lt:ISODate("2014-07-09 11:00:00")}})

db.view_view.find({view:{$size:10}}) 查询数组长度未10的,当前Mongo不直接支持数据长度范围查询,比如查询数据长度<10的,只能MapReduce编程实现

热心网友 时间:2022-05-06 19:34

mongo聚合的java实现,mongo API提供两种的实现方式:
1.基于mongotemplate提供的聚合接口:aggregate(arg1,arg2....)等不同参数的方法,读者可以按需调用;特点是该API封装了mongo底层的聚合操作符,比如$match,$project等,暴露出来的对应为project()、match()等接口;所以这种方法更适合初学者使用;使用该接口不会出现我们标题说的那个错误;
2.基于比较底层提供的DBCollection提供的aggregate接口(arg1,arg2....);该方法要求对mongo的nosql比较熟悉,因为该接口入参是DBObject,所以需要我们自己写mongo的聚合操作符:$match等操作符,所以要求比较高;和我们这里相关脸的问题是,该接口内部调用mongo底层的数据默认的输出格式是INLINE,所以会出现我们标题的那个错误;后面会分析;

热心网友 时间:2022-05-06 20:52

使用最原始的方法(dsl、@Query或者springdata等等),然后再做比较时间/判断标记类型等等操作,这种逻辑在服务器做似乎有点消耗性能

使用mongo包里Aggregation原生的写法

使用springdata 提供的Aggregation.newAggregation() 写法 

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
桑葚干直接吃还是泡水喝比较好桑葚干直接吃补肾吗 桑葚干泡水吃好还是干吃好 益智仁脑素神经酸片的功效与作用有哪些 黄冈师范学院师范专业有哪些 语文教育专业考研方向分析 黄冈师范学院语文教育专科毕业能拿教师资格证吗 php保留数字小数点后两位的方法 梦见被后咬 梦见母亲给赔鸡钱补了十二元的预兆 梦见门掉下来要二十五元修理费 我的是戴尔笔记本 不小心把内置麦克风给禁用了 但是怎么也找不到了 怎么才能给启用了啊 vivo怎么设置在wifi下更新软件 vivo手机应用商城提示更新,更新了怎么安装不了 vivo软件无法更新怎么办? 以下几种逃生方法哪种是不正确 A,用湿毛巾捂着嘴巴和鼻子B,弯着身子快速跑到安全地点 C,躲在床底下 中信银行每年收了信用卡300元年费,说我开了什么增值服务,有个什么保险,因我没有取消一直在收,如何投诉 火趣小视频什么时候能上市吗? 女生对我说,我恨你意味着什么? 如果一个男人对你说&quot;我恨你&quot;代表什么? 初期现金价值越高,退保率就越高是什么意思啊? 谁有 恶魔的圈套哥哥我恨你 求网盘分享 六六哥,我恨你 又一个被拉进去的。虚竹干嘛打的那么帅?哥哥我恨你 哥哥,为什么要伤害我,我恨你 求2013年的小说《魔鬼的圈套:哥哥,我恨你》txt下载 魔鬼的圈套:哥哥,我恨你txt全集下载 在深圳做普工.保安.或者酒店服务员各有什么不同! 深圳市内什么工作包吃住的? 深圳打工 在深圳做KTV服务员(DJ)好做吗?说日薪达到300—500 是真的吗 dell 5400麦克风不见了 电脑的麦克风处于关闭状态 请问在什么地方可以打开 怎么做平桥豆腐 淮扬菜平桥豆腐怎么做 推荐几首好听的歌,谢谢 平桥豆腐怎么做如何做好吃 有什么好听的英文歌 要抒情的那种 谁介绍我些好听的英文歌啊? 请问平桥豆腐羹有谁知道怎么做 到淮安市店里吃平桥豆腐要多少钱?从车站怎么去? 平桥豆腐用英文怎么说 微信扫一扫怎么显示那个蓝色的小框? 微信扫一扫没有框了? 为什么微信扫一扫页面没有那个框框了? 微博被人盗号关注了很多乱七八糟的人 最恶心的是有些关注删都删不掉怎么办?? 水泵一主一备手自动控制,手动时能启动两个泵,自动时一主出现故障一备立马启动? 微博内容被盗用,通知删除被无视,怎么办? 温州凯骏置业有限公司怎么样? 新浪微博账号被盗,盗号者绑定了身份信息,我虽然改了密码,但是请问怎么才能把他的身份信息删掉? 河南郑州连锁经营是真赚1040万吗?