要件: documents-bookdataコレクションには、bookBookerNameは同じだがbookNameが異なる複数のオブジェクトが含まれる場合があります。複数の本が同じ出版社を持つことができるので、出版社ごとの本の数を抽出する必要があることを意味します。
モデルクラス:
@Document(collection = "documents-bookdata")
public class DocumentsBookdata {
@Id
private String bookId;
private String bookName;
private String bookPublisherName;
//setters and getters
}
応答フォーマットの曲
public class PublisherBookCount {
private String bookPublisherName;
private int bookCount;
//setters and getters
}
応答フォーマット
[
{ "bookPublisherName": "docClassA", "bookCount": 3023 },
{ "bookPublisherName": "docClassB", "bookCount": 4100 }
]
この要件は論理的に行うこともできます。たとえば、findAllを使用してDocumentsBookdataのリストを取得し、ループを使用してフィルタリングし、出版社ごとの本の数を格納します。しかし、これは長いアプローチになります。コードの下のSOは単にAggregationを使用して取得します出版社ごとの本の数
public List<PublisherBookCount> getBookCOunt(){
List<PendingDocumentCount> list = new ArrayList<>();
PublisherBookCount count = null;
Aggregation aggregation = Aggregation.newAggregation( Aggregation.project("bookPublisherName").andExclude("_id"),
Aggregation.sortByCount("bookPublisherName"));
List<Document> docs= mongoTemplate.aggregate(aggregation, "documents-bookdata", Document.class).getMappedResults();
for(Document doc : docs) {
count = new PublisherBookCount();
count.setBookPublisherName(doc.get("bookPublisherName").toString());
count.setBookCount(Integer.parseInt(doc.get("count").toString()));
list.add(count);
}
return list;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加