您如何对 Grails criteria 中的预测结果进行排序使用 MongoDB 时?
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
}
}
默认数据库的结果(正确):
["CSS3","HTML5","JavaScript"]
MongoDB 的结果(错误):
["HTML5","CSS3","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"
}
}
最佳答案
在插件的 3.0 中,已重写投影支持以使用 MongoDb 聚合框架。因此,无论是否订购,都应该在 3.0 中工作的示例。见 https://jira.grails.org/browse/GPMONGODB-305
相关提交 https://github.com/grails/grails-data-mapping/commit/1d1155d8a9e29a25413effce081c21a36629137d
关于mongodb - Grails投影忽略MongoDB的排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20188249/