2013-11-25 16 views
5

के साथ सॉर्ट ऑर्डर को अनदेखा करने वाले Grails अनुमान MongoDB का उपयोग करते समय Grails criteria में अनुमानों के परिणाम कैसे ऑर्डर करते हैं?मोंगो डीबी

ऐसा लगता है कि सॉन्गिंग को मोंगोडीबी द्वारा अनदेखा किया जाता है। Grails डिफ़ॉल्ट इन-मेमोरी HSQLDB डेटाबेस के साथ चलाते समय नीचे दिया गया कोड क्रमबद्ध पुस्तक शीर्षकों की एक सूची देता है। मोंगोडीबी पर स्विच करने से सॉर्टिंग को अनदेखा कर दिया जाता है।

BookController.groovy

class BookController { 

    def library = [ 
     [author: "Jan", title: "HTML5"], 
     [author: "Lee", title: "CSS3"], 
     [author: "Sue", title: "JavaScript"] 
     ] 

    def titles() { 
     library.each { if (!Book.findByTitle(it.title)) new Book(it).save() } 
     def ids = Book.createCriteria().list() { 
     projections { id() } 
     order "title" 
     } 
     def titles = ids.collect { Book.get(it).title } 
     render titles as JSON 
     } 

} 

साथ परिणाम डिफ़ॉल्ट डीबी (सही):

["HTML5","CSS3","JavaScript"] 

ध्यान दें कि उपरोक्त पुस्तक: MongoDB (गलत) के साथ

["CSS3","HTML5","JavaScript"] 

परिणाम उदाहरण समस्या को दर्शाने के लिए बस कुछ मामूली कोड है। असली लक्ष्य डोमेन के किसी क्षेत्र द्वारा क्रमबद्ध डोमेन आईडी की एक सूची उत्पन्न करना है ताकि डोमेन वांछित क्रम में पुनरावृत्त हो सके।

वास्तविक डोमेन जो मैं कर रहा हूं वह स्मृति में फिट होने के लिए बहुत बड़ा है। दूसरे शब्दों में, यह एप्लिकेशन को क्रैश करेगा: Book.list().title.sort()

नीचे अतिरिक्त पृष्ठभूमि जानकारी है।

Book.groovy

class Book {  
    String title 
    String author 
    static mapWith = "mongo" 
} 

BuildConfig.groovy

... 
compile ":mongodb:1.3.1" 
... 

DataSource.groovy

... 
grails { 
    mongo { 
     host = "localhost" 
     port = 27017 
     databaseName = "book-store" 
     } 
    } 
+0

सभी उदाहरण मैं आदेश दिखा पा सकते हैं कोष्ठक में पैरामीटर और दिशा, आदेश की तरह ("शीर्षक", "एएससी") शामिल हैं - आपको लगता है कि कोशिश की है? साथ ही, क्या ऑर्डर सही है जब आप अनुमान शामिल नहीं करते हैं? –

+0

@AyayaKamsky: हाँ, मैंने माता-पिता के साथ और बिना और बिना दिशा के कोशिश की है। मैंने मानदंडों में 'ऑर्डर' जोड़ने का भी प्रयास किया है। उदाहरण: 'मानदंड = मानदंड। (" ऑर्डर ") 'अनुमान के बिना किए गए सॉर्ट ऑर्डर सही है, इसलिए ऐसा लगता है कि मोंगोडीबी पर' अनुमान 'का उपयोग करने के लिए समस्याएं विशिष्ट हैं। –

+0

मापदंड वापसी मूल्य 'ids' में आईडी के क्रम क्रम क्या है? और यदि आप 'अनुमान {id()} 'को बदलते हैं तो क्या कुछ बदलता है? 'अनुमान {संपत्ति ('आईडी')}' – matcauthon

उत्तर

1

proje प्लगइन के 3.0 में मोंगो डीबी एकत्रीकरण ढांचे का उपयोग करने के लिए ctions समर्थन को फिर से लिखा गया है। तो उदाहरण के साथ या आदेश के बिना 3.0 में काम करना चाहिए। देखें https://jira.grails.org/browse/GPMONGODB-305

प्रासंगिक प्रतिबद्ध https://github.com/grails/grails-data-mapping/commit/1d1155d8a9e29a25413effce081c21a36629137d

+0

यह बहुत अच्छा लगता है, लेकिन मैं अभी तक इसका परीक्षण करने में सक्षम नहीं हूं। हम सूची फ़ील्ड पर कुछ अनुमान लगाते हैं और यह स्पष्ट रूप से v3.0 में समर्थित नहीं है। जब हम v3.0 में अपग्रेड करने का कोई तरीका समझते हैं, तो मैं एक अपडेट पोस्ट करूंगा। –

+0

@ ग्रेमे रोचेर मैं यहाँ => table.find (क्वेरी) .sort ({"eventStartsAt": -1}) करने में असमर्थ हूं। छोड़ें (ऑफसेट) .limit (अधिकतम) –

संबंधित मुद्दे