首页 > 解决方案 > 通过忽略Mongodb中的案例对文档进行排序?

问题描述

我们使用的是旧版本的 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" }

提前谢谢你的帮助。

标签: regexmongodbsortingmongoosecase-insensitive

解决方案


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

使用$toLower将 name 转换为小写caseInsensitiveName并对其执行$sort

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

你也可以使用$toUpper

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

推荐阅读