#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, она очень хорошая и содержит примеры.