MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

स्प्रिंग डेटा में मोंगो एकत्रीकरण क्वेरी कैसे करें?

हालांकि यह पुराना धागा है, लेकिन मुझे आशा है कि जिसने भी इस धागे को पाया है वह अब मोंगो रिपोजिटरी में मल्टी स्टेज/पाइपलाइन एकत्रीकरण (बिल्कुल निश्चित नहीं है कि इसे क्या कहते हैं) करने के लिए सुरक्षित रूप से कर सकता है। मोंगो टेम्पलेट के बिना

लेकिन अब, मैं यहाँ में बताए गए स्प्रिंग डॉक के अनुसार एग्रीगेशन पाइपलाइन करने में सक्षम हूँ

मेरा एकत्रीकरण 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'}
     }}
 ])

जबकि मैं इसे MongoRepository में @Aggregation एनोटेशन में बदल देता हूं, नीचे इस तरह बन जाता हूं (मैं एपॉस्ट्रेफे को हटा रहा हूं और विधि पैरा के साथ भी बदल रहा हूं):

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

मेरा दस्तावेज़ इस तरह दिखता है:

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

और अनुमानों को होल्ड करने के लिए SumPrice वर्ग:

@Data
public class SumPrice {
  private BigDecimal totalPrice;
}

मुझे आशा है कि यह उत्तर किसी की भी मदद कर सकता है मोंगोटेम्पलेट का उपयोग किए बिना mongorepository में एकत्रीकरण करने का प्रयास करें



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला - कैसे समूहबद्ध करें और कैसे आबाद करें?

  2. टॉमकैट के साथ मोंगोडीबी जावा ड्राइवर डेटाबेस कनेक्शन पूलिंग

  3. MongoDB में दिनांक को स्ट्रिंग में बदलने के 3 तरीके

  4. mongoDB:ऐरे फ़ील्ड में जोड़े गए प्रत्येक नए बच्चे के लिए एक ऑब्जेक्ट आईडी बनाना

  5. MongoDB PHP UTF-8 समस्याएं