Как сортировать документы по настраиваемому (не натурально упорядоченному) полю

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

Вначале я решил эту проблему, спроецировав каждый размер на соответствующее число, то есть XS=1, S=2... Но есть ли более простой способ выполнения пользовательских сортировок?

1 ответ

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

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

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

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

Другие вопросы по тегам