Как заказать с 3 полями в mongoDB? - PullRequest
0 голосов
/ 13 июля 2020

У меня следующая проблема: мне нужно выполнить sortBy для коллекции mon go DB, но с 3 типами полей типа int / number.

Сейчас у меня есть запрос

await Products.find({}).sort({ miShopPrice: -1, discountPrice: -1, normalPrice: -1 })

но это возвращает меня:

[
        {
          "normalPrice": 250,
          "miShopPrice": 100,
          "discountPrice": 0
        },
        {
          "normalPrice": 64990,
          "miShopPrice": 0,
          "discountPrice": 0
        },
        {
          "normalPrice": 19500,
          "miShopPrice": 0,
          "discountPrice": 0
        },
        {
          "normalPrice": 1600,
          "miShopPrice": 0,
          "discountPrice": 0
        }
]

условие выглядит следующим образом

if you have miShopPrice and normalPrice -> myShopPrice
if you have miShopPrice and discountPrice -> myShopPrice
if you have discountPrice and normalPrice -> discountPrice
if you only have normalPrice -> normalPrice

то, что должен вернуть запрос, будет следующим:

[
        {
          "normalPrice": 64990,
          "miShopPrice": 0,
          "discountPrice": 0
        },
        {
          "normalPrice": 19500,
          "miShopPrice": 0,
          "discountPrice": 0
        },
        {
          "normalPrice": 1600,
          "miShopPrice": 0,
          "discountPrice": 0
        },
        {
          "normalPrice": 250,
          "miShopPrice": 100,
          "discountPrice": 0
        }
]

не могли бы вы мне помочь, я был бы очень признателен

1 Ответ

0 голосов
/ 13 июля 2020

.sort({ miShopPrice: -1, discountPrice: -1, normalPrice: -1 } означает выполнение сортировки по убыванию по miShipPrice, затем по DiscountPrice, затем по normalPrice, чтобы вывод был правильным для этой сортировки.

Сортировка, которую вы описываете, упорядочивается по новому значению, полученному из три поля. Это не поддерживается напрямую оператором сортировки, но с помощью агрегации вы можете добавить это дополнительное значение со стадией и $addFields, упорядочить новое значение с помощью стадии $sort, а затем удалить временное поле с помощью стадии $project. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...