mongodb - Grails投影忽略MongoDB的排序顺序

标签 mongodb sorting grails groovy criteria

您如何对 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/

相关文章:

javascript - 为mongo shell运行js文件

javascript - 在 Node.JS 中排序数据

ruby - 根据值然后键对ruby中的哈希进行排序

grails - Jenkins 无法运行程序 "Xvfb": java. io.IOException:没有这样的文件或目录

java - 提供 Web 浏览器和 Java 应用程序之间的接口(interface)

javascript - Mongoose 分页

mongodb - 如何计算 MongoDB 中多个 GeoJSON 点之间的路线距离?

MongoDB 3.0 Windows 服务启动 : System Error 2 has occured

r - 如何按所有列对 data.frame 进行排序

grails - 为什么我不必在配置中声明监听器?