我尝试使用Spring Data MongoDB实现典型的分页用例,该用例提供查询结果页面和最大可用文档数。我有一个有效的解决方案,但是,我不确定这是否合理,是否有效或是......
所以,到目前为止我的步骤
skip
和limit
应用于管道在代码中:
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
的第一个解决方案?