Я использую этот конвейер агрегации, который группирует мои документы, проецирует их перед тем, как поместить их в другую коллекцию, используя операцию $out
.
collectionObservations.aggregate(Arrays.asList(
new Document("$group",
new Document("_id",
new Document("producerId", "$producer.producerId")
.append("name", "$producer.name")
.append("fundings", "$producer.fundings")
.append("datasetId", "$dataset.datasetId")
.append("title", "$dataset.metadata.title")
.append("portalSearchCriteria", "$dataset.metadata.portalSearchCriteria")
.append("featureOfInterest", "$observation.featureOfInterest")
.append("observedProperty", "$observation.observedProperty")
).append("documentId",
new Document("$push", "$documentId"))),
new Document("$project",
new Document("documentId", 1)
.append("producer.producerId", "$_id.producerId")
.append("producer.name", "$_id.name")
.append("producer.fundings", "$_id.fundings")
.append("dataset.datasetId", "$_id.datasetId")
.append("dataset.metadata.title", "$_id.title")
.append("dataset.metadata.portalSearchCriteria", "$_id.portalSearchCriteria")
.append("observation.featureOfInterest", "$_id.featureOfInterest")
.append("observation.observedProperty", "$_id.observedProperty")
.append("_id", 0)),
out(outputCollectionName)
)).allowDiskUse(Boolean.TRUE);
outputCollection
не создается и не заполняется (если он был создан ранее), пока у меня не было .forEach(printBlock)
, чтобы напечатать результат агрегации, как объяснено в документе .
Может кто-нибудь объяснить мне, что происходит и ожидается ли такое поведение?