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

时间:2013-03-18 07:30:58

标签: mongodb sql-order-by

我可以在mysql上轻松完成

select * from TABLE order by length(FIELD) asc

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

假设您的架构类似于:

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

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

我认为这将完成这项工作,但仅适用于mongo 2.6及以上

答案 2 :(得分:-1)

要对MongoDB中的文档进行排序,您需要使用sort()方法。该方法接受包含字段列表及其排序顺序的文档。要指定排序顺序1和-1。 1用于升序,而-1用于降序。

<强>语法

sort()方法的基本语法如下 -

db.COLLECTION_NAME.find().sort({KEY:1})

示例

考虑收集myycol有以下数据。

{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Untitled"}

以下示例将按降序显示按标题排序的文档。

db.mycol.find({},{"title":1,_id:0}).sort({"title":-1})
{"title":"Untitled"}
{"title":"NoSQL"}
{"title":"MongoDB"}

请注意,如果您未指定排序首选项,则sort()方法将按升序显示文档。