c# - 如何在MongoDB中进行自然查询和排序?
问题描述
我有一个mongoDB
包含数百万个文件。
我想查询数据库并使用特定字段自然地对结果进行排序。
从 Mongo 文档看来,似乎只支持朴素排序。有没有办法自然排序?
例子:
- 文档 1 _id:“abc10.def”
- 文档 2 _id:“abc2.def”
- 文档 3 _id:“abc1.def”
询问:
db_collection.find({}).sort({_id: 1})
按顺序返回列表:
- doc3 ("abc1.def")
- doc1 ("abc10.def")
- doc2 ("abc2.def")
如何排序以接收以下列表?:
- doc3 ("abc1.def")
- doc2 ("abc2.def")
- doc1 ("abc10.def")
解决方案
这里的问题是较短的字符串应该在较长的字符串之前返回,然后您应该按字母顺序对具有相同长度的字符串进行排序。为此,您需要一个length
可以使用$strLenBytes添加的临时字段。
db.col.aggregate([
{
$addFields: {
length: { $strLenBytes: "$_id" }
}
},
{
$sort: {
length: 1, _id: 1
}
},
{
$project: {
length: 0
}
}
])
推荐阅读
- c# - 如何检查一个字符串的数字高于另一个字符串?
- apache-kafka - 在控制台模式下运行时,Kafka 的并行概念是否适用?
- python - 打字时如何检查字符串长度?
- hyperledger-fabric - Hyperledger Fabric 中的链码实例化失败
- delphi - Delphi 10.3 中的 FastReports
- node.js - React JS 的路径名字符串问题
- vert.x - Vert.x 事件总线的问题
- python - 为什么我收到 TypeError:“NoneType”类型的对象没有 len() 错误(实际上是从我的代码的工作部分复制代码)
- tensorflow - 如何训练不同维度的数据
- javascript - 试图获取数组的最后一个对象并将其移动到前面以便在香草 JS/画布蛇游戏中移动蛇