MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara melakukan kueri agregasi Mongo di Spring Data?

Meskipun ini adalah utas lama, tetapi saya harap siapa pun yang menemukan utas ini sekarang dapat dengan aman melakukan agregasi multi tahap/pipa (tidak yakin apa namanya) di MongoRepository. Karena saya juga berjuang mencari petunjuk dan contoh agregasi di repositori mongo tanpa template mongo .

Tetapi sekarang, saya dapat melakukan pipa Agregasi sesuai dengan dokumen pegas yang dikatakan di sini

Agregasi saya terlihat seperti ini di 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'}
     }}
 ])

Sementara saya mengubahnya menjadi @Aggregation anotasi di MongoRepository menjadi seperti di bawah ini (saya menghapus aposthrephe dan juga mengganti dengan metode params):

@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);

Dokumen saya terlihat seperti ini:

@Document(collection = "SalesPo")
@Data
public class SalesPo {
  @Id
  private String id;
  @JsonSerialize(using = LocalDateSerializer.class)
  private LocalDate poDate;
  private BigDecimal amount;
}

Dan kelas SumPrice untuk menyimpan proyeksi:

@Data
public class SumPrice {
  private BigDecimal totalPrice;
}

Saya harap jawaban ini dapat membantu siapa pun mencoba melakukan agregasi di mongorepository tanpa menggunakan mongotemplate .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menghapus dokumen yang direferensikan oleh id di mongoDB dari php?

  2. Hapus Duplikat dari MongoDB

  3. Percona Live Frankfurt 2018 - Rekap Acara &Sesi Kami

  4. Masukkan Nilai pada Posisi Tertentu dalam Array di MongoDB

  5. MongoDB $sampelRate