Jak zamówić wyniki projekcji w Grails criteria podczas korzystania z MongoDB?Projekcje Grails ignorujące kolejność sortowania z MongoDB
Wygląda na to, że sortowanie jest ignorowane przez MongoDB. Poniższy kod poprawnie zwraca listę posortowanych tytułów książek po uruchomieniu z domyślną bazą danych HSQLDB w Grails. Przełączenie na MongoDB powoduje ignorowanie sortowania.
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
}
}
Wynik z domyślnym DB (poprawne):
["CSS3","HTML5","JavaScript"]
Wynik z MongoDB (niewłaściwym):
["HTML5","CSS3","JavaScript"]
Należy zauważyć, że powyższa książka przykład to tylko trochę trywialny kod ilustrujący problem. Prawdziwym celem jest wygenerowanie listy identyfikatorów domen posortowanych według pola domeny, aby domena mogła być iterowana w żądanej kolejności.
Rzeczywista domena, z którą mam do czynienia, jest zbyt duża, aby zmieścić się w pamięci. Innymi słowy, spowoduje to awarię aplikacji: Book.list().title.sort()
Poniżej znajdują się dodatkowe informacje dodatkowe.
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"
}
}
Wszystkie przykłady mogę znaleźć porządek pokazując mają parametr w parens i to kierunek, jak zlecenia („tytuł”, „mal”) - Próbował pan jest? Czy kolejność jest poprawna, jeśli nie uwzględniasz prognoz? –
@AsyaKamsky: Tak, próbowałem z i bez parens i zi bez kierunku. Próbowałem nawet dodać 'order' do kryteriów. Przykład: 'criteria = criteria.order (" order ")' Kolejność sortowania jest prawidłowa, gdy wykonano ją bez 'projekcji', więc wydaje się, że problemy dotyczą używania' projekcji' na MongoDB. –
Jaka jest kolejność sortowania identyfikatorów w kryteriach zwracających wartość "ids"? A czy coś się zmieni, jeśli zmienisz "projekcje {id()}" na? 'projections {property ('id')}' – matcauthon