Mặc dù đây là luồng cũ, nhưng tôi hy vọng những ai tìm thấy luồng này bây giờ có thể an toàn để thực hiện tổng hợp nhiều giai đoạn / đường ống (không chắc chắn nó gọi là gì) trong MongoRepository. Vì tôi cũng đang vật lộn để tìm manh mối và ví dụ về tổng hợp trong kho lưu trữ mongo không có mẫu mongo .
Nhưng bây giờ, tôi có thể thực hiện quy trình Tổng hợp theo tài liệu mùa xuân đã nói ở đây
Tổng hợp của tôi trông giống như thế này trong mongoshell:
db.getCollection('SalesPo').aggregate([
{$project: {
month: {$month: '$poDate'},
year: {$year: '$poDate'},
amount: 1,
poDate: 1
}},
{$match: {$and : [{year:2020} , {month:7}]
}}
,
{$group: {
'_id': {
month: {$month: '$poDate'},
year: {$year: '$poDate'}
},
totalPrice: {$sum: {$toDecimal:'$amount'}},
}
},
{$project: {
_id: 0,
totalPrice: {$toString: '$totalPrice'}
}}
])
Trong khi tôi biến đổi nó thành chú thích @Aggregation trong MongoRepository trở thành như thế này bên dưới (Tôi đang xóa aposthrephe và cũng thay thế bằng các tham số phương thức):
@Repository
public interface SalesPoRepository extends MongoRepository<SalesPo, String> {
@Aggregation(pipeline = {"{$project: {\n" +
" month: {$month: $poDate},\n" +
" year: {$year: $poDate},\n" +
" amount: 1,\n" +
" poDate: 1\n" +
" }}"
,"{$match: {$and : [{year:?0} , {month:?1}] \n" +
" }}"
,"{$group: { \n" +
" '_id': {\n" +
" month: {$month: $poDate},\n" +
" year: {$year: $poDate} \n" +
" },\n" +
" totalPrice: {$sum: {$toDecimal:$amount}},\n" +
" }\n" +
" }"
,"{$project: {\n" +
" _id: 0,\n" +
" totalPrice: {$toString: $totalPrice}\n" +
" }}"})
AggregationResults<SumPrice> sumPriceThisYearMonth(Integer year, Integer month);
Tài liệu của tôi trông giống như sau:
@Document(collection = "SalesPo")
@Data
public class SalesPo {
@Id
private String id;
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate poDate;
private BigDecimal amount;
}
Và lớp SumPrice để giữ các dự báo:
@Data
public class SumPrice {
private BigDecimal totalPrice;
}
Tôi hy vọng câu trả lời này có thể giúp ích cho những ai cố gắng thực hiện tổng hợp trong mongorepository mà không sử dụng mongotemplate .