【发布时间】:2019-05-02 21:02:50
【问题描述】:
我正在尝试使用 Spring Data Mongo 构建分面分类,但我对如何使用 Aggregation.facet 方法感到困惑。
当我试图弄清楚这个东西是如何工作的时,我使用了两次相同的FacetOperation,我得到了一个java.lang.IllegalArgumentException: Invalid reference 'producer.fundings'!。这个FacetOperation 单独在Aggregation 工作正常!
FacetOperation fo1 = facet(
unwind("producer.fundings"),
project().and("producer.fundings.type").as("type").and("producer.fundings.acronym").as("name"),
group("name", "type").count().as("count"),
project("count").and("_id.name").as("name").and("_id.type").as("type").andExclude("_id")
).as("fundingAcronymFacet");
FacetOperation fo2 = facet(
unwind("producer.fundings"),
project().and("producer.fundings.type").as("type").and("producer.fundings.acronym").as("name"),
group("name", "type").count().as("count"),
project("count").and("_id.name").as("name").and("_id.type").as("type").andExclude("_id")
).as("fundingNameFacet");
Aggregation agg = Aggregation.newAggregation(fo1,fo2);
AggregationResults<FacetClassification> groupResults = mongoTemplate.aggregate(agg, "observations", FacetClassification.class);
List<FacetClassification> facet = groupResults.getMappedResults();
所以要么我没有很好地使用 facet 方法,只需要一个调用来创建不同的 facet。这看起来就像它在 MongoDB API 中的实现方式:$facet (aggregation)
或者我需要链接facet 调用来创建我的分类的不同方面,并且需要知道第一次调用后会发生什么以及为什么找不到完全相同的参考。
文档仅提供创建一个方面的示例,在其他地方找不到任何示例:Spring Data Mongo Faceted Classification。
相关:Using multiple facets in MongoDB Spring Data
任何帮助将不胜感激!
【问题讨论】:
标签: java spring mongodb spring-data spring-data-mongodb