当前位置: 首页 > 知识库问答 >
问题:

首先通过一个查询查找集合中的所有数据,然后通过第二个查询查找其余数据

林和煦
2023-03-14

我对mongo很陌生,我正在尝试用两个查询从收集中获取所有数据,我有条目,每个条目都有startdate。我需要得到所有的数据,首先所有项目的开始日期低于当前日期排序的DESC和跟随其余数据的开始日期大于或等于当前日期排序的asc。我不知道该怎么做。很抱歉我的英语不好,我是新手。

我在下一条路上试过这样做

Long itemsNumber = mongoTemplate.count(
            Query.query(
                new Criteria().andOperator(finalCriteria, Criteria.where("type").in(ItemType.EVENT.name()).and("startDate").lt(new Date()))
            ), EventItem.class);
            
items = mongoTemplate.find(
        Query.query(
            new Criteria().andOperator(finalCriteria, Criteria.where("type").in(ItemType.EVENT.name()).and("startDate").lt(new Date()))
        )
        .limit(model.getPaging().getItemsPerPage())
        .skip(model.getPaging().getPage() * model.getPaging().getItemsPerPage())
        .with(Sort.by(Direction.DESC, "startDate")),
        EventItem.class
    );
    
if(items.size() < model.getPaging().getItemsPerPage()) {
        items.addAll(
            mongoTemplate.find(
                Query.query(
                    new Criteria().andOperator(finalCriteria, Criteria.where("type").in(ItemType.EVENT.name()).and("startDate").gte(new Date()))
                )
                .limit((int) (model.getPaging().getItemsPerPage() - items.size()))
                .skip(model.getPaging().getPage() * model.getPaging().getItemsPerPage() - itemsNumber)
                .with(Sort.by(Direction.ASC, "startDate")), 
                EventItem.class
            )
        );      
    }

但如果可能的话,我想通过一个查询来实现

共有1个答案

丌官子安
2023-03-14

您需要数据库中的所有项。

List<Item> items = repository.findAll(...);
List<Item> firstGroup = items.stream().filter(item -> item.getStartDate().isBefore(current)).collect(Collectors.toList());
List<Item> secondGroup = items.stream().filter(Predicate.not(item -> item.getStartDate().isBefore(current))).collect(Collectors.toList());

将数据转发到下一阶段。

 类似资料:
  • 我正在用Java开发一个使用JPA的路线规划系统。我需要创建一个findBy方法,通过包含它的城市列表来查找路线。以下是课程: 现在我尝试了,但并不惊讶它不起作用,如下所示: 有没有一种简单的方法可以使用JPA,或者我必须编写一个困难的自己的@Query并以某种方式迭代,才能通过集合找到一个实体?

  • 您能建议如何在Spring Data JPA存储库中编写查询吗?情况是这样的:我有两个实体:客户和产品,关系为“OneToMany”——意味着一个客户可能有多个产品。在代码中,看起来客户实体已经设置了产品,产品引用了客户,非常简单。如果我从DB JSON中检索Customer,将如下所示: 问题是,我如何向DB写入查询,以查找其产品与通过产品集合的产品匹配的所有客户?例如,我想找到所有拥有type

  • 我有实体类用户通过@IdClass注释使用复合键 复合键: 我将Spring数据与hibernate JPA一起使用。因此,我有回购接口: 我想通过具体姓名和姓氏列表从数据库中获取所有活跃用户。例如。我想使用这样的方法 如何通过Spring数据或JPQL查询此需求?

  • 我使用的是spring数据mongodb。 这是我的控制器方法: 控制器: 这里我将字符串列表作为请求参数传递。 我的服务方式是: 存储库代码: 在这里,我在存储库中的查询总是返回空数组[]。我不知道这个查询有什么问题。 我的请求URL是:

  • 我有一个DynamoDB表,有1000万条记录。我需要每24小时对每个记录的主键执行一些计算。为了实现这一点,我可以每24小时查询一次整个表。由于单个DynamoDB查询只返回1MB数据,这将使总查询和计算时间超过24小时,因此我希望有10名工作人员执行DynamoDB查询和计算。我应该如何查询该表,以便一条记录只能由一名工作人员检索,最终检索所有1000万条记录? 似乎我需要将LastEvalu

  • 问题内容: 假设我在Access中具有以下信息的表格: 我的问题是,如何将第二列中的值连接到基于第一列的行值。我想要的查询结果如下: 我想通过查询来实现。有人可以帮我实现吗? 问题答案: 使用数据的示例: