springmvc+mongodb中group方法的书写

因为数据量增大的问题,现在越来越多的猿们开始使用mongodb等的nosql数据库了。不过mongodb非关系型,查询时还是有些许的不便的,比如我们在mysql等里面使用的聚合,在mongodb中就不太一样。

mongodb中的语句不一样,我们java中调用就更不一样了。先看一段代码:

    public Map<String, Object> queryUserMaxPrice(String userId) {
        Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(Criteria.where("userId").is(userId)),
                Aggregation.group("word").max("price1").as("maxPrice"),
                Aggregation.project("maxPrice").and("word").previousOperation()
        );
        AggregationResults groupResults = mongoTemplate.aggregate(agg, DayWordPrice.class, Map.class);
        Map<String, Object> resultMap = new HashMap<String, Object>();
        List<Map> mappedResults = groupResults.getMappedResults();
        for (Map mappedResult : mappedResults) {
            if (mappedResult.get("word") != null)
                resultMap.put(mappedResult.get("word").toString(), mappedResult.get("maxPrice"));
        }
        return resultMap;
    }
这个是查询每个word中数值最大的price1。

        和它对应的sql语句应该是:select max(price1) as maxPrice,word from dayWordPrice where userId = #{userId} group by word

但是这里面需要注意的一点是:Aggregation.project 里面是写你需要输出的属性,and里面写group的属性,然后后面的previousOperation则是为了在输出时将word在map中的key值设置为word,如果没有这个,那么输出的map中,group的属性会默认输出为“_id”,也就是当成主键,这个是需要强调的,然后project和and里面的属性不能换位置,换了位置,属性就会丢失,而且key值也会对应不上!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值