Mongo DB排序不区分大小写

Var*_*mar 53 sorting mongodb mongodb-java

我想从mongodb获得一个排序形式的名称.我通过以下方式完成了这个

__PRE__

通过此查询执行,我能够找到区分大小写的排序结果.但我只想在忽略形式的情况下获得结果.怎么做?请指导我完成这个.

我正在研究java代码.所以请用适当的方法建议我.

Sam*_*aye 45

更新: 截至目前,mongodb有不区分大小写的索引:

Users.find({})
  .collation({locale: "en" })
  .sort({name: 1})
  .exec()
  .then(...)
Run Code Online (Sandbox Code Playgroud)

贝壳:

db.getCollection('users')
  .find({})
  .collation({'locale':'en'})
  .sort({'firstName':1})
Run Code Online (Sandbox Code Playgroud)

更新:这个答案已经过时,3.4会有不区分大小写的索引.有关更多信息,请访问 JIRA https://jira.mongodb.org/browse/SERVER-90


不幸的是,MongoDB还没有不区分大小写的索引:https://jira.mongodb.org/browse/SERVER-90,任务已被推回.

这意味着当前对不区分大小写进行排序的唯一方法是实际创建一个特定的"低级"字段,复制有问题的排序字段的值(当然更低),然后对其进行排序.


Nei*_*unn 41

排序确实像MongoDB中那样工作,但您可以使用聚合动态执行此操作:

采取以下数据:

{ "field" : "BBB" }
{ "field" : "aaa" }
{ "field" : "AAA" }
Run Code Online (Sandbox Code Playgroud)

所以用以下声明:

db.collection.aggregate([
    { "$project": {
       "field": 1,
       "insensitive": { "$toLower": "$field" }
    }},
    { "$sort": { "insensitive": 1 } }
])
Run Code Online (Sandbox Code Playgroud)

会产生如下结果:

{
    "field" : "aaa",
    "insensitive" : "aaa"
},
{
    "field" : "AAA",
    "insensitive" : "aaa"
},
{
    "field" : "BBB",
    "insensitive" : "bbb"
}
Run Code Online (Sandbox Code Playgroud)

对于在转换时产生相同键的任何值,将保持实际的插入顺序.


Mla*_*vic 18

这一直是一个问题,在相当长的时间对MongoDB的JIRA,但现在就解决了.有关详细文档,请查看此发行说明.你应该用collation.

User.find()
    .collation({locale: "en" }) //or whatever collation you want
    .sort({name:1})
    .exec(function(err, users) {
        // use your case insensitive sorted results
    });
Run Code Online (Sandbox Code Playgroud)


小智 9

添加代码.collation({'locale':'en'})有助于解决我的问题。