Hi all,
Current MongoDBTemplate.aggregate interface is not
aligned to jakarta NoSQL:
https://github.com/eclipse/jnosql-databases/blob/e97f46e45e62634f6ec12efbe40ba743741ae725/jnosql-mongodb/src/main/java/org/eclipse/jnosql/databases/mongodb/mapping/MongoDBTemplate.java#L86
It returns a stream of Mongo Document (as a
Map<String, BsonValue>) which may be useful in some
scenarios, but unfortunately can not be adopted to the
NoSQL model.
Converter helper classes like MongoDBUtils are not public,
so there is no way to go for the model for aggregation
method.
My problem is that I can not limit select query an the
only way to do it is using aggregate like:
[
{ "$match": {} }
{ "$limit": 10 }
]
IMHO this must be something:
MongoDBDocumentManager:
public Stream<DocumentEntity> aggregate(String
collectionName, List<Bson> pipeline) {
Objects.requireNonNull(pipeline, "filter is
required");
Objects.requireNonNull(collectionName,
"collectionName is required");
MongoCollection<Document> collection =
mongoDatabase.getCollection(collectionName);
AggregateIterable<Document> aggregate =
collection.aggregate(pipeline);
return stream(aggregate.spliterator(),
false).map(MongoDBUtils::of)
.map(ds ->
DocumentEntity.of(collectionName, ds));
}
MongoDBTemplate:
<T> Stream<T> aggregate(String
collectionName, List<Bson> pipeline);
<T> Stream<T> aggregate(Class<T>
entity, List<Bson> pipeline);
DefaultMongoDBTemplate:
@Override
public <T> Stream<T> aggregate(String
collectionName, List<Bson> pipeline) {
Objects.requireNonNull(collectionName,
"collectionName is required");
Objects.requireNonNull(pipeline, "pipeline is
required");
return this.getManager().aggregate(collectionName,
pipeline)
.map(this.converter::toEntity);
}
@Override
public <T> Stream<T>
aggregate(Class<T> entity, List<Bson>
pipeline) {
Objects.requireNonNull(entity, "entity is
required");
Objects.requireNonNull(pipeline, "pipeline is
required");
EntityMetadata entityMetadata =
this.entities.get(entity);
return
this.getManager().aggregate(entityMetadata.name(),
pipeline)
.map(this.converter::toEntity);
}
Kind regards,
Dmitry
_______________________________________________