Dem*_*ian 5 sorting grails groovy criteria mongodb
在使用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
}
}
Run Code Online (Sandbox Code Playgroud)
默认DB的结果(正确):
["CSS3","HTML5","JavaScript"]
Run Code Online (Sandbox Code Playgroud)
MongoDB的结果(错误):
["HTML5","CSS3","JavaScript"]
Run Code Online (Sandbox Code Playgroud)
请注意,上面的书中的示例只是一些简单的代码来说明问题.真正的目标是生成按域的字段排序的域ID列表,以便可以按所需顺序迭代域.
我正在处理的实际域太大而无法放入内存中.换句话说,这会使应用程序崩溃:Book.list().title.sort()
以下是其他背景信息.
Book.groovy
class Book {
String title
String author
static mapWith = "mongo"
}
Run Code Online (Sandbox Code Playgroud)
BuildConfig.groovy
...
compile ":mongodb:1.3.1"
...
Run Code Online (Sandbox Code Playgroud)
DataSource.groovy的
...
grails {
mongo {
host = "localhost"
port = 27017
databaseName = "book-store"
}
}
Run Code Online (Sandbox Code Playgroud)
投影支持已被重写,以使用插件 3.0 中的 MongoDb 聚合框架。所以这个例子无论有没有排序都应该在 3.0 中工作。请参阅https://jira.grails.org/browse/GPMONGODB-305
相关提交https://github.com/grails/grails-data-mapping/commit/1d1155d8a9e29a25413effce081c21a36629137d
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |