MongoDB을 사용할 때 Grails criteria의 투영 결과는 어떻게 주문합니까?MongoDB에서 정렬 순서를 무시하는 Grails 투영
MongoDB에서는 정렬 작업을 무시한 것으로 보입니다. 아래의 코드는 Grails 기본 메모리 상 HSQLDB 데이터베이스로 실행될 때 정렬 된 책 제목의 목록을 올바르게 반환합니다. MongoDB로 전환하면 정렬이 무시됩니다. 와
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
}
}
결과 기본 (올바른) DB :
["HTML5","CSS3","JavaScript"]
참고 위의 책이 : MongoDB를 (잘못)와
["CSS3","HTML5","JavaScript"]
결과 예제는 문제를 설명하기위한 단순한 코드입니다. 진짜 목표는 도메인이 원하는 순서대로 반복 될 수 있도록 도메인 필드별로 정렬 된 도메인 ID 목록을 생성하는 것입니다.
내가 다루는 실제 도메인이 너무 커서 메모리에 맞지 않습니다. 즉, 응용 프로그램이 다운됩니다. 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"
}
}
모든 예제는 괄호에있는 매개 변수가 방향, 순서처럼 ("제목", "ASC")를 포함 커밋 - 당신이 그것을 시도를? 또한 예상을 포함하지 않을 때 순서가 맞습니까? –
@AsyaKamsky : 그래, 나는 괄호 안과없이, 그리고 방향을 가지고, 그리고 시도하지 않고 노력했다. 나는 심지어 기준에 '주문'을 추가하려고 시도했다. 예 :'criteria = criteria.order ("order")''projections '없이 끝나면 정렬 순서가 정확하므로 MongoDB에서'projections'를 사용하는 것과 관련하여 문제가있는 것처럼 보입니다. –
기준 반환 값'ids'에있는 ID의 정렬 순서는 무엇입니까? 'projections {id()}'를 변경하면 무엇이 바뀌나요? 'projections {property ('id')}' – matcauthon