Как выполнить сортировку по ключу, расположенному внутри массива объектов в MongoDB

#database #mongodb #mongodb-query #aggregation-framework #pymongo

Вопрос:

Я создал следующую структуру документа после применения запроса агрегирования к моей коллекции документов mongodb:

 "lots": [
{
  "lot_no": "Lot number",
  "location": "ABC123",
  "shipping_line_id": "ONE1568295272",
  "shipping_line_name": "One Line",
  "containers": {
    "CNTR_20STD": {
      "qty": 10,
      "expiry_date": 87126348762
    },
    "CNTR_40STD": {
      "qty": 10,
      "expiry_date": 87126348762
    },
    "CNTR_40HC": {
      "qty": 20,
      "expiry_date": 87126348762
    }
  },
  "status": true,
  "lot_items": [
    {
      "_id": "String to be generated as ID",
      "origin_port": {
        "port_name": "Nhava Sheva",
        "port_code": "INNSA"
      },
      "destination_port": {
        "port_name": "Jebel Ali",
        "port_code": "AEJEA"
      },
      "container_type": "CNTR_20STD/CNTR_40STD/CNTR_40HC",
      "allowable_weight": 30,
      "special_terms": "Some special terms",
      "buy": 1000,
      "sell": 1200
    }
  ]
}
 

]

Я хочу иметь возможность сортировать результаты на основе названия порта отправления/названия порта назначения/покупки/продажи/допустимого веса и т.д.

Я пытаюсь сделать следующее, но это не работает: {«$sort»: {«lot_items.buy»}}

Может ли кто-нибудь помочь мне в том, как выполнить сортировку в соответствии с вышеупомянутыми ключами, присутствующими в массиве объектов в документе MongoDB?

Комментарии:

1. надеюсь, вы указали направление сортировки, например: { «$sort»: { «lot_items.buy»: -1 } }

2. Если вы хотите отсортировать элементы в массиве lot_items, вам нужно в $unwind этот массив, выполнить $sort и после этого $group по идентификатору документа, восстановить его структуру, найти те, которые очень распространены, вы найдете много примеров(поиск как сортировать вложенный массив), при необходимости прочитайте также документацию mongodb, она очень хорошая и содержит примеры.