regex - 通过忽略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" }
提前谢谢你的帮助。
解决方案
演示 - https://mongoplayground.net/p/OkphOyxTMo2
使用$toLower将 name 转换为小写caseInsensitiveName
并对其执行$sort
。
将字符串转换为小写,返回结果。
你也可以使用$toUpper。
db.collection.aggregate([
{
$project: {
name: 1,
caseInsensitiveName: {
$toLower: "$name"
}
}
},
{
$sort: {
caseInsensitiveName: 1
}
}
])
推荐阅读
- r - 正则表达式匹配一个数字
- .net - 当我在 dbcontext 中插入新实体时,EFCore 无法使用 .AddRange() 方法填充 id 列
- sql - 将两个查询与不同的表和 where 子句结合起来
- yocto - Yocto 中的点发布与里程碑发布
- azure-cosmosdb - 处理长整数类型时 SQL SDK 和存储过程之间的不一致
- android - 带有 Github Actions 和 Fastlane 的 Android CI/CD
- javascript - 尝试部署不和谐机器人时出错
- android - 当viewmodel持有来自客户端的价值时,如何阻止观察者被多次触发?
- javascript - 是否有用于编辑谷歌工作表单元格的循环功能?
- nginx - nginx proxy_pass 使用具有动态 IP 地址的主机