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

MongoRepository गतिशील प्रश्न

नीचे वह समाधान है जिसके साथ मैं आया हूं। तो बस संक्षेप में, मेरे पास जो समस्या थी, वह यह थी कि फ़िल्टरिंग मानदंडों पर लचीलापन बढ़ाने के लिए इनपुट के रूप में एक क्वेरी ऑब्जेक्ट दिए गए क्वेरी को निष्पादित करने में सक्षम नहीं था। समाधान काफी सरल निकला, मुझे बस दस्तावेज़ीकरण को ध्यान से पढ़ना था :)।

  1. चरण

MongoRepository का विस्तार करता है और अपने कस्टम फ़ंक्शन जोड़ता है:

@NoRepositoryBean
public interface ResourceRepository<T, I extends Serializable> extends MongoRepository<T, I> {

    Page<T> findAll(Query query, Pageable pageable);
}
  1. चरण

इस इंटरफ़ेस के लिए एक कार्यान्वयन बनाएँ:

public class ResourceRepositoryImpl<T, I extends Serializable> extends SimpleMongoRepository<T, I> implements ResourceRepository<T, I> {

    private MongoOperations mongoOperations;
    private MongoEntityInformation entityInformation;

    public ResourceRepositoryImpl(final MongoEntityInformation entityInformation, final MongoOperations mongoOperations) {
        super(entityInformation, mongoOperations);

        this.entityInformation = entityInformation;
        this.mongoOperations = mongoOperations;
    }

    @Override
    public Page<T> findAll(final Query query, final Pageable pageable) {
        Assert.notNull(query, "Query must not be null!");

        return new PageImpl<T>(
                mongoOperations.find(query.with(pageable), entityInformation.getJavaType(), entityInformation.getCollectionName()),
                pageable,
                mongoOperations.count(query, entityInformation.getJavaType(), entityInformation.getCollectionName())
        );
    }
}
  1. चरण

अपने कार्यान्वयन को डिफ़ॉल्ट MongoRepository कार्यान्वयन के रूप में सेट करें:

@EnableMongoRepositories(repositoryBaseClass = ResourceRepositoryImpl.class)
public class MySpringApplication {
    public static void main(final String[] args) {
        SpringApplication.run(MySpringApplication.class, args);
    }
}
  1. चरण

अपने कस्टम ऑब्जेक्ट के लिए एक रिपॉजिटरी बनाएं:

public interface CustomObjectRepo extends ResourceRepository<CustomObject, String> {
}

अब यदि आपके पास एक से अधिक ऑब्जेक्ट हैं जिन्हें आप एक मोंगो दस्तावेज़ स्टोर में सहेजना चाहते हैं, तो यह एक इंटरफ़ेस को परिभाषित करने के लिए पर्याप्त है जो आपके ResourceRepository का विस्तार करता है। (जैसा कि चरण 4 में देखा गया है), और आपके पास Page<T> findAll(Query query, Pageable pageable) उपलब्ध होगा। कस्टम क्वेरी विधि। मैंने इस समाधान को मेरे द्वारा आजमाए गए समाधान में सबसे सुंदर पाया है।

यदि आपके पास सुधार के लिए कोई सुझाव हैं, तो कृपया उन्हें समुदाय के साथ साझा करें।

सादर, ईसाई



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. UTF-8 को ध्यान में रखते हुए मैं अपने MongoDB को कैसे कॉन्फ़िगर करूं?

  2. मोंगोमैपर एसोसिएशन डुप्लीकेट छोड़ देता है

  3. कुछ समय बीतने के बाद दस्तावेज़ में परिवर्तनशील मान बदलें?

  4. क्या एक Mongo $नियर रिटर्न दस्तावेज़ जिसके लिए मल्टीपॉइंट में कोई बिंदु सीमा के भीतर है?

  5. मुझे तारीख के लिए अपरिचित तर्क क्यों मिल रहा है FromString:डीबी संस्करण> 3.6 होने के बावजूद 'प्रारूप' जो एकत्रीकरण का समर्थन करता है