2015-03-13 3 views
9

साथ पृष्ठांकन मैं पृष्ठांकन योग्य के साथ एक क्वेरी है? मुझे Page<T> लौटने वाली एक विधि दिखाई नहीं दे रही है।mongoTemplate

उत्तर

5

MongoTemplate में Page वापस करने के तरीके नहीं हैं। find() विधियां सामान्य List लौटाती हैं।

with(new PageRequests(page, size) एक MongoDB क्वेरी (गिनती क्वेरी मुझे लगता है कि द्वारा दीं)

PageMongoDB repositories जो वसंत डेटा खजाने की एक विशेष मामला है के साथ संयोजन के रूप में इस्तेमाल किया जा सकता के साथ skip और limit समायोजित करने के लिए आंतरिक रूप से प्रयोग किया जाता है।

इस प्रकार, आपको अंकुरित परिणामों के लिए MongoRepository के Page findAll(Pageable pageable) का उपयोग करना होगा (वास्तव में PagingAndSortingRepository से विरासत में मिला)।

4

यह सच है कि MongoTemplate में पेजबेल के साथ findXXX नहीं है।

लेकिन आप इसके लिए वसंत रिपोजिटरी PageableExecutionUtils का उपयोग कर सकते हैं।

अपने उदाहरण में यह इस तरह दिखेगा: मूल स्प्रिंग डेटा भंडार में

Pageable pageable = new PageRequests(page, size); 
Query query = new Query().with(pageable); 
List<XXX> list = mongoTemplate.find(query, XXX.class); 
return PageableExecutionUtils.getPage(
         list, 
         pageable, 
         () -> mongoTemplate.count(query, XXX.class)); 

की तरह, PageableExecutionUtils गिनती अनुरोध करते हैं और आप के लिए एक अच्छा Page में लपेट होगा।

Here आप देख सकते हैं कि वसंत वही कर रहा है।

+0

और क्लास पेजेबल एक्सेक्यूशन उपयोग कहां है? –

+0

स्प्रिंग डेटा कॉमन्स से: https://github.com/spring-projects/spring-data-commons/blob/master/src/main/java/org/springframework/data/repository/support/PageableExecutionUtils.java – d0x

+0

ठीक है, धन्यवाद। मैंने वसंत के पुराने संस्करण का इस्तेमाल किया। –

0

d0x के उत्तर के आधार पर और spring code पर देखकर। मैं इस बदलाव का उपयोग कर रहा हूं जो वसंत-बूट-स्टार्टर-डेटा-मोंगोडब निर्भरता से वसंत डेटा कॉमन्स जोड़ने की आवश्यकता के बिना काम करता है।

@Autowired 
private MongoOperations mongoOperations; 

@Override 
public Page<YourObjectType> searchCustom(Pageable pageable) { 
    Query query = new Query().with(pageable); 
    // Build your query here 

    List<YourObjectType> list = mongoOperations.find(query, YourObjectType.class); 
    long count = mongoOperations.count(query, YourObjectType.class); 
    Page<YourObjectType> resultPage = new PageImpl<YourObjectType>(list , pageable, count); 
    return resultPage; 
} 
संबंधित मुद्दे