将查询结果和行计数与Spring MongoDB聚合相结合

时间:2017-07-14 16:21:02

标签: java spring pagination aggregation spring-data-mongodb

我尝试使用Spring Data MongoDB实现典型的分页用例,该用例提供查询结果页面和最大可用文档数。我有一个有效的解决方案,但是,我不确定这是否合理,是否有效或是......

所以,到目前为止我的步骤

  1. 使用过滤条件创建MatchOperation
  2. 分组并计算找到的文件数
  3. 添加实际信息(本例中为简单ID)
  4. 展开ID列表
  5. skiplimit应用于管道
  6. 在代码中:

     List<AggregationOperation> ops = new ArrayList<>();
     ops.add(match(filterCriteria));
     ops.add(Aggregation.group().count().as("total").addToSet("userId").as("userId"));
     ops.add(Aggregation.unwind("userId"));
     ops.add(skip(page*count));
     ops.add(limit(count));
    

    我正在使用unwind,因为我不知道如何沿着管道传递total count。生成的LinkedHashMap看起来像这样(采用JSON样式)

    [
      { total: 13, userId: 100 },
      { total: 13, userId: 101 },
      { total: 13, userId: 102 },
      ...
    ]
    

    我没有冗余地喜欢这样的事情:

    { total: 13, 
      userIds: [ 100,101,102,...]
    }
    

    通过聚合获得第二种形式是否可能(也是合理的)?无论如何,聚合是实现这个目标的适当方法,还是有更好的方法? 除了冗余之外,是否有任何反对使用unwind的第一个解决方案?

0 个答案:

没有答案