【问题标题】:unlimited cursor Mongo DB for java无限游标 Mongodb for java
【发布时间】:2018-01-24 12:56:26
【问题描述】:

我正在使用此聚合查询处理所有文档,但这里的问题是光标有限,他返回大约 500 个结果。我试过limit(0)但它不起作用! ,我也尝试使用limit(10000)或limit(20000),但它不起作用我总是得到500个结果

 AggregateIterable<Document> resultMongo = collection.aggregate(Arrays.asList(
                    Aggregates.match(and(filters)),
                    Aggregates.group(and(eq(CoverageWarningFieldEnum.DT_EXTRACT.getLabel(), "$" + CoverageWarningFieldEnum.DT_EXTRACT.getLabel())
                            , eq(CoverageWarningFieldEnum.ID_SUP_NUMBER.getLabel(), "$" + CoverageWarningFieldEnum.ID_SUP_NUMBER.getLabel())
                            , eq(CoverageWarningFieldEnum.CODE_SUPPLIER_DLPA_SITE.getLabel(), "$" + CoverageWarningFieldEnum.CODE_SUPPLIER_DLPA_SITE.getLabel())
                            , eq(CoverageWarningFieldEnum.SUP_NAME.getLabel(), "$" + CoverageWarningFieldEnum.SUP_NAME.getLabel())
                            , eq(CoverageWarningFieldEnum.MLF07_GRPFOU.getLabel(), "$" + CoverageWarningFieldEnum.MLF07_GRPFOU.getLabel()))
                            , sum("sum_w_ord_unit_ord_min_coverage", "$" + CoverageWarningFieldEnum.W_ORD_UNIT_ORD_MIN_COVERAGE.getLabel())
                            , sum("sum_w_excess_delivery", "$*" + CoverageWarningFieldEnum.W_EXCESS_DELIVERY.getLabel())
                            , sum("sum_w_inventory", "$" + CoverageWarningFieldEnum.W_INVENTORY.getLabel())
                            , sum("sum_w_service_blocking", "$" + CoverageWarningFieldEnum.W_SERVICE_BLOCKING_2.getLabel())
                            , sum("sum_w_service_blocking_4", "$w" + CoverageWarningFieldEnum.W_SERVICE_BLOCKING_4.getLabel())
                            , sum("sum_w_coverage_change", "$" + CoverageWarningFieldEnum.W_COVERAGE_CHANGE.getLabel())
                            , sum("sum_w_pa_supervision", "$" + CoverageWarningFieldEnum.W_PA_SUPERVISION.getLabel())
                            , sum("sum_val_pn_stock_total_euro", "$" + CoverageWarningFieldEnum.VAL_PN_STOCK_TOTAL_EURO.getLabel())
                            , sum("sum_val_pn_average_sale_12month_euro", "$" + CoverageWarningFieldEnum.VAL_PN_AVERAGE_SALE_12MONTH_EURO.getLabel())
                            , sum("sum_score", "$" + CoverageWarningFieldEnum.SCORE.getLabel())),
                    Aggregates.sort(Sorts.orderBy(Sorts.descending(CoverageWarningFieldEnum.SCORE.getLabel())))
            ));

【问题讨论】:

  • 我看不出问题出在哪里。当您附加计数阶段 (Aggregates.count("totalCount");) 以查看聚合返回的文档数时会发生什么?

标签: java mongodb mongodb-query aggregation-framework


【解决方案1】:

你做错了。

聚合是一种“分组依据”操作。这就是为什么它将您的结果集分为 500 个组。

这清楚地解释了聚合分组https://docs.mongodb.com/manual/aggregation/

如果要加载所有记录,请使用 mongo“查找”操作。 https://docs.mongodb.com/manual/reference/method/db.collection.find/

【讨论】:

  • 这个问题我应该按组来解决,因为它是一个 select distinct 。我怎样才能选择不同的(SQL)和所有的总和并得到所有的文件......
  • 您说的是三种不同的操作。 1. Mongo distinct 操作根据一些过滤器获取所有不同的文档。 2. Mongo 聚合操作计算总和。 3.mongo find操作获取所有文件。我不认为所有这些操作都可以在一个查询中完成。
  • 是的,我说的是 Sum 、 distinct 和 sort
  • 我不能用简单的查找来做到这一点......如果你认为我可以,你能给我一个例子
  • 我建议您使用多个查询来获得结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
相关资源
最近更新 更多