0

Я экспериментирую с 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 ... Но есть ли более простой способ для выполнения пользовательских видов?

ответ

1

Да нет более простого способа, но у вас есть три способа сделать это,

1), как было указаны вы можете использовать $project и положить поместить номер 123 в зависимости от размера и сортировать его на том, что число

2) вы можете сортировать по второму символу размерного строки по возрастанию зиЬзЬг 2 символа и сортировки его

3) использовать $text для сортировки в зависимости от его веса

+0

ONl y, если '$ substr' может выполнять расщепление, начиная с конца, тогда я мог бы получить последнюю цифру, которая указывает фактический размер. Это не полностью решает проблему, хотя с тех пор «XS» и «S» будут обрабатываться одинаково. – kaskelotti

+0

Можете ли вы немного объяснить, как использовать '$ text' в этом контексте? – kaskelotti

Смежные вопросы