Я экспериментирую с MongoDB и его структурой агрегации. С помощью операции размотки я могу разделить документ с полем массива на несколько документов для каждого индекса массива. Теперь, если массив имеет данные, которые не имеют естественного порядка сортировки, как я могу отсортировать это в MongoDB?Как отсортировать документы по пользовательскому (неестественному упорядоченному) полю
Пример:
Коллекция продукты имеют следующие документы (_id поле опущено)
{ "type" : "t-shirt", "size" : [ "S", "M", "L" ] }
{ "type" : "pants", "size" : [ "XS", "S", "M", "L", "XL" ] }
После размотки данных сбора с помощью size
поля, результаты
{ "type" : "t-shirt", "size" : "S" }
{ "type" : "t-shirt", "size" : "M" }
{ "type" : "t-shirt", "size" : "L" }
{ "type" : "pants", "size" : "XS" }
{ "type" : "pants", "size" : "S" }
{ "type" : "pants", "size" : "M" }
{ "type" : "pants", "size" : "L" }
{ "type" : "pants", "size" : "XL" }
Размера поле не имеет естественного порядка, XL и XS, например, сортируются рядом друг с другом, хотя они должны быть отсортированы в первую/последнюю позицию.
Я migth получить это решается первым проецировании каждого размера к его соответствующему числу, т.е. XS = 1, S = 2 ... Но есть ли более простой способ для выполнения пользовательских видов?
ONl y, если '$ substr' может выполнять расщепление, начиная с конца, тогда я мог бы получить последнюю цифру, которая указывает фактический размер. Это не полностью решает проблему, хотя с тех пор «XS» и «S» будут обрабатываться одинаково. – kaskelotti
Можете ли вы немного объяснить, как использовать '$ text' в этом контексте? – kaskelotti