Сортировка данных в mongodb

У меня есть поле в mongodb под названием propertyRating, значения которого: 5.0/4.0/3.0/SC.

Я хочу отсортировать данные на основе свойстваRating, сначала 5 звезд, затем 4 звезды, 3 звезды и в последнем СЦ.

Есть ли возможность отсортировать данные по 5,4,3 и потом СК.

Я использовал,

Array
(
    [0] => Array
        (
            [$match] => Array
                (
                    [total_charges] => Array
                        (
                            [$gt] => 0
                        )

                )

        )

    [1] => Array
        (
            [$sort] => Array
                (
                    [propertyRating] => -1
                )

        )

    [2] => Array
        (
            [$skip] => 0
        )

    [3] => Array
        (
            [$limit] => 20
        )

)

Сначала сортируются данные значений SC, а затем данные звезд 5,4,3.

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

ray 25.06.2024 15:55

Привет @ray Спасибо за ответ.

Mamta Malvi 26.06.2024 07:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как предложил Рэй: «Вам нужно сопоставить строки с некоторыми значениями меньше 3». Поэтому создайте поле для сортировки и установите подходящее значение, например -1.0, когда значение равно «SC».

Вот конвейер агрегации для этого:

db.collection.aggregate([
  {
    // set `propertyRatingSort` to -1.0 when it's "SC"
    // otherwise use the value as-is
    $set: {
      propertyRatingSort: {
        $cond: [
          { $eq: ["$propertyRating", "SC"] },
          -1.0,
          "$propertyRating"
        ]
      }
    }
  },
  // sort descending using the created sort field
  { $sort: { propertyRatingSort: -1 } },
  // remove the extra field
  { $unset: "propertyRatingSort" }
])

Игровая площадка Монго

Поместите свой этап $match total_charges > 0 перед первым $set выше.

Привет @aneroid Большое спасибо за подробное объяснение. Я применил логику, и она сработала.

Mamta Malvi 26.06.2024 07:37

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