根据发布版本排序,即; a.b.c

Sort on the basis of release version i.e; a.b.c

我有一个集合,字段 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"
        }
]

等等

我想得到一个基于版本排序的输出。

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

如有任何帮助,我们将不胜感激。

提前致谢:)

您可以通过 collation

获得此行为

首先创建一个索引:

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

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

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

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