Java 分面分类-Spring数据Mongo
我试图使用SpringDataMongo构建一个刻面分类,但我对如何使用Java 分面分类-Spring数据Mongo,java,spring,mongodb,spring-data,spring-data-mongodb,Java,Spring,Mongodb,Spring Data,Spring Data Mongodb,我试图使用SpringDataMongo构建一个刻面分类,但我对如何使用Aggregation.facet方法感到困惑 当我试图弄清楚这个东西是如何工作的时候,我使用了两次相同的FaceOperation,我得到了一个java.lang.IllegalArgumentException:Invalid reference“producer.fundings”。这个facet操作单独在聚合中运行良好 FacetOperation fo1 = facet( unwind("produ
Aggregation.facet
方法感到困惑
当我试图弄清楚这个东西是如何工作的时候,我使用了两次相同的FaceOperation
,我得到了一个java.lang.IllegalArgumentException:Invalid reference“producer.fundings”代码>。这个facet操作
单独在聚合
中运行良好
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操作fo1=facet(
平仓(“生产商资金”),
project()和(“producer.fundings.type”).as(“type”)和(“producer.fundings.acronym”).as(“name”),
组(“名称”、“类型”).count().as(“计数”),
项目(“计数”)和(“id.name”)作为(“名称”)和(“id.type”)作为(“类型”)并排除(“id”)
).as(“基金公司”);
facet操作fo2=facet(
平仓(“生产商资金”),
project()和(“producer.fundings.type”).as(“type”)和(“producer.fundings.acronym”).as(“name”),
组(“名称”、“类型”).count().as(“计数”),
项目(“计数”)和(“id.name”)作为(“名称”)和(“id.type”)作为(“类型”)并排除(“id”)
).as(“基金名称方面”);
Aggregation agg=Aggregation.newAggregation(fo1,fo2);
AggregationResults groupResults=mongoTemplate.aggregate(agg,“观察”,FacetClassification.class);
List facet=groupResults.getMappedResults();
所以要么我没有很好地使用facet方法,只需要一个调用就可以创建不同的facet。这与MongoDB API中的实现方式类似:
或者我需要链接facet
调用来创建分类的不同facet,并且需要知道在第一次调用之后发生了什么,以及为什么找不到完全相同的引用
文档仅提供创建一个方面的示例,在其他地方找不到任何示例:
有关:
任何帮助都将不胜感激 您可以使用和()。示例应如下所示,以便在同一聚合操作中创建两个不同的方面:
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")
.and(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("fundingNamesFacet");
您可以使用和()。示例应如下所示,以便在同一聚合操作中创建两个不同的方面:
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")
.and(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("fundingNamesFacet");