首页 > 解决方案 > 如何在MongoDB中进行自然查询和排序?

问题描述

我有一个mongoDB包含数百万个文件。

我想查询数据库并使用特定字段自然地对结果进行排序。

从 Mongo 文档看来,似乎只支持朴素排序。有没有办法自然排序?

例子:

询问: db_collection.find({}).sort({_id: 1})

按顺序返回列表:

如何排序以接收以下列表?:

标签: c#mongodbsortingnatural-sort

解决方案


这里的问题是较短的字符串应该在较长的字符串之前返回,然后您应该按字母顺序对具有相同长度的字符串进行排序。为此,您需要一个length可以使用$strLenBytes添加的临时字段。

db.col.aggregate([
    {
        $addFields: {
            length: { $strLenBytes: "$_id" }
        }
    },
    {
        $sort: {
            length: 1, _id: 1
        }
    },
    {
        $project: {
            length: 0
        }
    }
])

推荐阅读