首页 > 解决方案 > 根据发布版本排序,即;美国广播公司

问题描述

我有一个version随机顺序的字段集合

[
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae69019"),
                "version" : "1.2.1"
        },
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae6901a"),
                "version" : "1.2.2"
        },
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae6901b"),
                "version" : "1.2.3"
        },
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae6901c"),
                "version" : "1.1.0"
        },
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae6901d"),
                "version" : "1.1.1"
        },
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae6901e"),
                "version" : "1.3.1"
        },
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae6901f"),
                "version" : "1.1.2"
        },
         .
         .
         .
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae6901f"),
                "version" : "1.9.1"
        },
        {
                "_id" : ObjectId("5ea7dfcf33b735ec0ae6901f"),
                "version" : "1.10.1"
        }
]

等等

我想根据版本按排序顺序获得输出。

我可以在拆分版本后对其进行排序,但我不想采用这种方法。

任何帮助将非常感激。

提前致谢 :)

标签: mongodbsortingversion-controlmongodb-queryaggregation-framework

解决方案


您可以通过排序规则获得此行为

首先创建一个索引:

.createIndex({version:1},{collation:{locale:"en",numericOrdering:true}})

并在需要排序时指定排序规则:

.find().sort({version:1}).collation({locale:"en",numericOrdering:true})

您可以在没有索引的情况下获得类似的行为,但对于非平凡的数据集,它确实使它表现更好。


推荐阅读