Сортировать на основе релизной версии т.е. аб c - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть коллекция с полем 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"
        }
]

и т. Д.

Я хочу получить вывод в отсортированном порядке на основе версии.

Я могу отсортировать его после разделения версий, но я не хочу go с помощью этого подхода.

Любая помощь будет высоко ценится.

Заранее спасибо:)

1 Ответ

1 голос
/ 28 апреля 2020

Вы можете получить это поведение с помощью сопоставления

Сначала создайте индекс:

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

А также укажите параметры сортировки, когда вам нужно отсортировать:

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

Вы можете получить подобное поведение без индекса, но для нетривиальных наборов данных это действительно заставляет его работать лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...