【问题标题】:Sorting the documents by ignoring the case in Mongodb?通过忽略Mongodb中的案例对文档进行排序?
【发布时间】:2021-06-24 07:46:06
【问题描述】:

我们使用的是旧版本的 Mongodb,所以排序规则不起作用,我们不使用索引。 文档保存在 MongoDB 集合中:

{ "_id" : ObjectId("5223850fa89de4a9f691dacf"), "name" : "B" }
{ "_id" : ObjectId("52238511a89de4a9f691dad0"), "name" : "c" }
{ "_id" : ObjectId("52238515a89de4a9f691dad1"), "name" : "A" }
{ "_id" : ObjectId("52238522a89de4a9f691dad2"), "name" : "z" }
{ "_id" : ObjectId("5223852ea89de4a9f691dad3"), "name" : "X" }

我正在查询,按名称排序:

db.collection.find().sort({name:1});

结果是:

{ "_id" : ObjectId("52238515a89de4a9f691dad1"), "name" : "A" }
{ "_id" : ObjectId("5223850fa89de4a9f691dacf"), "name" : "B" }
{ "_id" : ObjectId("5223852ea89de4a9f691dad3"), "name" : "X" }
{ "_id" : ObjectId("52238511a89de4a9f691dad0"), "name" : "c" }
{ "_id" : ObjectId("52238522a89de4a9f691dad2"), "name" : "z" }

提前感谢您的帮助。

【问题讨论】:

    标签: regex mongodb sorting mongoose case-insensitive


    【解决方案1】:

    我认为你可以使用Collation

    db.collection.find({}).collation({strength: 1}).sort({ name: 1 })
    

    【讨论】:

      【解决方案2】:

      演示 - https://mongoplayground.net/p/OkphOyxTMo2

      使用$toLowercaseInsensitiveName中的name转换为小写,并对其执行$sort

      将字符串转换为小写,返回结果。

      你也可以使用$toUpper

      db.collection.aggregate([
        {
          $project: {
            name: 1,
            caseInsensitiveName: {
              $toLower: "$name"
            }
          }
        },
        {
          $sort: {
            caseInsensitiveName: 1
          }
        }
      ])
      

      【讨论】:

        猜你喜欢
        • 2018-07-24
        • 1970-01-01
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 2019-02-13
        • 2020-11-07
        相关资源
        最近更新 更多