MongoDB Sort

场景

使用 Springspring-data-commons 这个jar包进行 MongoDB 查询的时候,
在写Sort (package 是 org.springframework.data.domain.Sort) 的时候,遇到了一些坑,
特地记下来

问题

问题是这样的
当排序的时候,可能会遇到同时排序好几个字段的情况

写法有两种,见下面的测试代码

Sort sort = new Sort(Sort.Direction.DESC, "weight");
        
Sort sort2 = new Sort(Sort.Direction.DESC, "createTime");

//不生效
sort.and(sort2);

System.out.println(sort);

//生效
Sort sort3 = new Sort(Sort.Direction.DESC, "weight").and(sort2);

System.out.println(sort3);

输出如下:

weight: DESC
weight: DESC,createTime: DESC

发现直接用对象and 不生效,只有在new的时候and 才有用

原因

刚开始还以为是BUG,后面想了想特地去看了下源码,看下是怎么回事

public Sort and(Sort sort) {

    if (sort == null) {
        return this;
    }

    ArrayList<Order> these = new ArrayList<Order>(this.orders);

    for (Order order : sort) {
        these.add(order);
    }

    return new Sort(these);
}

原来 and加入的对象 是存到了返回值那个新对象里,而没有去修改原来的对象,

所以正确用法是

sort = sort.and(sort2);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 吃饭时就吃饭,聊天时就聊天,切勿一心二用。这是父亲经常说的。父亲觉得,只有心无挂碍,用心咀嚼每一颗米,才能真正尝出...
    高桥先生阅读 902评论 0 2
  • 因为初涉民族法,多了对故乡的所谓被动的学术审视 故乡还是那个故乡,她沉默慈祥地坐卧于胶东屋脊那个传说可以直通东海的...
    stonelawyer阅读 254评论 0 0
  • 我听到了, 听到了你“滴答、滴答”, 敲打窗棂的声音。 我想: 那一定是你, 想跟我说悄悄话哩! 我看到了, 看到...
    心静如水_a160阅读 250评论 0 1
  • 想了很久这个标题,总算是决定下来了。这次我要写很多话,说很多无言以对的想法。题目由最初的《最好的年华遇见最坏的人》...
    故人殇水_浅戈易阅读 166评论 0 1
  • 以前我们用过favicon在浏览器给网站进行身份标识,用法如下: [html]view plaincopy 现今移...
    鸣人阅读 2,307评论 0 1

友情链接更多精彩内容