如何在MongoDB上按字符串长度对结果进行排序

Hen*_*Liu 10 sql-order-by mongodb

我可以在mysql上轻松完成

select * from TABLE order by length(FIELD) asc
Run Code Online (Sandbox Code Playgroud)

我怎么能在MongoDB上做到这一点?

Zoh*_*uda 15

MongoDB 3.4 引入了$strLenCP最终支持此功能的聚合运算符。一个例子:

db.collection.aggregate(
    [
        {$project: {
            "field": 1,
            "field_length": { $strLenCP: "$field" }
        }},
        {$sort: {"field_length": -1}},
        {$project: {"field_length": 0}}
    ]
)
Run Code Online (Sandbox Code Playgroud)


小智 -3

假设您的架构类似于:

example = {_id: "XXX", text: "YYY"}

db.example.aggregate([
 {$project : {text : 1, length : {$size : "$text"}}}, 
 {$sort : {length : 1}}
]);
Run Code Online (Sandbox Code Playgroud)

我认为这可以完成工作,但仅适用于 mongo 2.6 及更高版本

  • $size 用于数组,而不是字符串,所以这不起作用。 (5认同)