javamongodbsortingmongodb-java

Case insensitive sorting in MongoDB


How can I sort a MongoDB collection by a given field, case-insensitively? By default, I get A-Z before a-z.


Solution

  • Update: As of version 3.4 mongodb has case insensitive indexes with the collation feature:

    Users.find({})
      .collation({locale: "en" })
      .sort({name: 1})
      .exec()
      .then(...)
    

    shell:

    db.getCollection('users')
      .find({})
      .collation({'locale':'en'})
      .sort({'firstName':1})
    

    Update: This answer is out of date, 3.4 will have case insensitive indexes. Look to the JIRA for more information https://jira.mongodb.org/browse/SERVER-90


    Unfortunately MongoDB does not yet have case insensitive indexes: https://jira.mongodb.org/browse/SERVER-90 and the task has been pushed back.

    This means the only way to sort case insensitive currently is to actually create a specific "lower cased" field, copying the value (lower cased of course) of the sort field in question and sorting on that instead.