MongoDB 中不区分大小写的排序
2022-08-31 12:49:40
如何按给定字段对 MongoDB 集合进行排序,不区分大小写?默认情况下,我在 a-z 之前得到 A-Z。
如何按给定字段对 MongoDB 集合进行排序,不区分大小写?默认情况下,我在 a-z 之前得到 A-Z。
更新:截至目前,mongodb具有不区分大小写的索引:
Users.find({})
.collation({locale: "en" })
.sort({name: 1})
.exec()
.then(...)
壳:
db.getCollection('users')
.find({})
.collation({'locale':'en'})
.sort({'firstName':1})
更新:这个答案已经过时了,3.4将有不区分大小写的索引。查看JIRA以获取更多信息,https://jira.mongodb.org/browse/SERVER-90
不幸的是,MongoDB还没有不区分大小写的索引:https://jira.mongodb.org/browse/SERVER-90,任务已经推迟了。
这意味着目前对大小写不敏感的唯一方法是实际创建一个特定的“小写”字段,复制相关排序字段的值(当然是小写的),然后对其进行排序。
排序在MongoDB中确实像这样工作,但您可以使用聚合动态执行此操作:
取以下数据:
{ "field" : "BBB" }
{ "field" : "aaa" }
{ "field" : "AAA" }
因此,使用以下语句:
db.collection.aggregate([
{ "$project": {
"field": 1,
"insensitive": { "$toLower": "$field" }
}},
{ "$sort": { "insensitive": 1 } }
])
将产生如下结果:
{
"field" : "aaa",
"insensitive" : "aaa"
},
{
"field" : "AAA",
"insensitive" : "aaa"
},
{
"field" : "BBB",
"insensitive" : "bbb"
}
对于转换时产生相同键的任何值,将保持实际的插入顺序。