MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để thực hiện truy vấn tổng hợp Mongo trong Dữ liệu mùa xuân?

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 .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để chèn một tài liệu có ngày tháng trong mongo?

  2. trả lại tài liệu với tài liệu con mới nhất chỉ trong mongodb tổng hợp

  3. mongo sao chép từ bộ sưu tập này sang bộ sưu tập khác (trên cùng một db)

  4. Hiểu các tùy chọn sao lưu MongoDB

  5. Người theo dõi - thiết kế cơ sở dữ liệu mongodb