Как уже упоминал Джо, в этом вам может помочь сортировка.
db.products.aggregate(
[{$sort: {"sku": -1}}],
{collation: {locale: "en", numericOrdering: true}})
Пример вывода:
{ "_id" : ObjectId("5e58d89fe0aba047483c3bbc"), "sku" : "500012" }
{ "_id" : ObjectId("5e58d89de0aba047483c3bbb"), "sku" : "500011" }
{ "_id" : ObjectId("5e58d8a3e0aba047483c3bbe"), "sku" : "404012" }
{ "_id" : ObjectId("5e58d8a0e0aba047483c3bbd"), "sku" : "400012" }
{ "_id" : ObjectId("5e58d8abe0aba047483c3bbf"), "sku" : "90000" }
{ "_id" : ObjectId("5e58d8aee0aba047483c3bc0"), "sku" : "1000" }
Но если sku , то на самом деле всегда число почему бы не сохранить его как номер в базе данных? Тогда сортировка должна работать из коробки без каких-либо дополнительных параметров сортировки.
Но учтите:
Использование параметров сортировки и индекса
Использование индекса для сравнения строк операция также должна указывать такое же сопоставление. То есть индекс с сопоставлением не может поддерживать операцию, которая выполняет сравнение строк в индексированных полях, если в операции задано другое сопоставление.
Из-за этого ИМХО вам следует просто сохранить sku в качестве числа в базе данных, если это возможно, и сортировать его без сортировки.