今天的工作还是继续昨天没有完成的,由于对mongodb数据库的不熟悉,导致昨天的思路上也出了一点问题,我需要查询出同一个ruleID中不同的processingID的条数,然后根据条数来排列先后顺序,如果条数相等的情况下,就根据updateTime再排序。
昨天的思路是先按数量排序,然后再根据ruleID查出最后的修改时间,因为那个时候实际上还是没有理解group几个参数的真正意思,尤其是对于reduceFunction根本就是硬套。所以代码就写成了
groupBy=GroupBy.key("processingMethodID").initialDocument("{count:0}")
.reduceFunction("function(doc,prev){prev.count++}");
直到今天,自己在网上查了一堆的资料再结合mongodbVUE之后,总算是初步了知道了reduceFunction的意思。在它里边实际上可以进行一些逻辑运算,从而得到自己想要的结果,因此我的思路就可以直接变成查询出ruleID和count和最后的操作时间,相对于昨天也就减少了很多步,代码就可以变化成
groupBy=GroupBy.key("processingMethodID").initialDocument("{count:0,maxUpdateTime:0}").reduceFunction("function(doc,prev){prev.count++;if(prev.maxUpdateTime-doc.updateTime<0)" +
"{prev.maxUpdateTime=doc.updateTime;}}");
虽然group之后应该可以直接进行排寻,但是因为我对排序还不懂,所以只能用这个方法暂时解决我需要解决的问题,好在最终成功了。
昨天的思路是先按数量排序,然后再根据ruleID查出最后的修改时间,因为那个时候实际上还是没有理解group几个参数的真正意思,尤其是对于reduceFunction根本就是硬套。所以代码就写成了
groupBy=GroupBy.key("processingMethodID").initialDocument("{count:0}")
.reduceFunction("function(doc,prev){prev.count++}");
直到今天,自己在网上查了一堆的资料再结合mongodbVUE之后,总算是初步了知道了reduceFunction的意思。在它里边实际上可以进行一些逻辑运算,从而得到自己想要的结果,因此我的思路就可以直接变成查询出ruleID和count和最后的操作时间,相对于昨天也就减少了很多步,代码就可以变化成
groupBy=GroupBy.key("processingMethodID").initialDocument("{count:0,maxUpdateTime:0}").reduceFunction("function(doc,prev){prev.count++;if(prev.maxUpdateTime-doc.updateTime<0)" +
"{prev.maxUpdateTime=doc.updateTime;}}");
虽然group之后应该可以直接进行排寻,但是因为我对排序还不懂,所以只能用这个方法暂时解决我需要解决的问题,好在最终成功了。