Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Não consigo fazer o sort no meu BSON

Utilizando o MongoDB Compass estou tentando fazer um sort de itens dentro de um array dentro do meu BSON. Da seguinte forma:

{ "det.produto.descricao": 1 }

Mas o retorno nunca vem organizado. É possível organizar os itens dentro do BSON através das queries? Abaixo um exemplo de como seria a estrutura do meu BSON:

{
  "_id": {
    "$oid": "675ef0e46214bf8d67185573"
  },
  "cabecalho": {
    "numero_pedido": "686",
    "quantidade_itens": 33
  },
  "det": [
    {
      "produto": {
        "descricao": "BLUSA MIA - OFF BUTTER - 38"
      }
    },
    {
      "produto": {
        "descricao": "BLUSA MIA - PRETO - 40"
      }
    },
    {
      "produto": {
        "descricao": "CORSET ALICE - OFF BUTTER - 36"
      }
    },
    {
      "produto": {
        "descricao": "CORSET ALICE - OFF BUTTER - 40"
      }
    },
    {
      "produto": {
        "descricao": "REGATA MEL - AZUL MARITIMO - 36"
      }
    },
    {
      "produto": {
        "descricao": "REGATA MEL - AZUL MARITIMO - 38"
      }
    },
    {
      "produto": {
        "descricao": "SAIA MIDI ALICE - OFF BUTTER - 36"
      }
    },
    {
      "produto": {
        "descricao": "SAIA MIDI ALICE - OFF BUTTER - 40"
      }
    },
    {
      "produto": {
        "descricao": "SAIA MIDI BÚZIOS - CHERRY - 38"
      }
    },
    {
      "produto": {
        "descricao": "SAIA MIDI BÚZIOS - MARISCO - 40"
      }
    },
    {
      "produto": {
        "descricao": "SAIA MIDI ISLA - PRETO - 38"
      }
    },
    {
      "produto": {
        "descricao": "SAIA MIDI ISLA - PRETO - 40"
      }
    },
    {
      "produto": {
        "descricao": "TOP CARIBE - AZUL MARITIMO - 38"
      }
    },
    {
      "produto": {
        "descricao": "TOP CARIBE - CHERRY - 40"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO BOJO ESTHER - AZUL MARITIMO - 38"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO BOJO ESTHER - CHERRY - 40"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO LONGO DANIELA - PRETO - 40"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO LONGO DANIELA - PRETO - 42"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIA - CHERRY - 36"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIA - CHERRY - 38"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIDI CARIBE - CHERRY - 38"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIDI CARIBE - CHERRY - 40"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIDI MAYA - AZUL MARITIMO - 40"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIDI MAYA - AZUL MARITIMO - 42"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIDI NINA - AZUL MARITIMO - 40"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIDI NINA - AZUL MARITIMO - 42"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIDI RIO - CHERRY - 40"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO MIDI RIO - OFF BUTTER - 38"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO CURTO RIO - OFF BUTTER - 36"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO CURTO RIO - OFF BUTTER - 38"
      }
    },
    {
      "produto": {
        "descricao": "VESTIDO BOJO ESTHER - PRETO - 36"
      }
    },
    {
      "produto": {
        "descricao": "BERMUDA LIZ - AZUL MARITIMO - 36"
      }
    },
    {
      "produto": {
        "descricao": "BERMUDA LIZ - AZUL MARITIMO - 38"
      }
    }
  ]
}
1 resposta
solução!

Oi Asaph,

Entendo sua dificuldade em ordenar os itens dentro do array "det" no MongoDB Compass. A função sort() do MongoDB, como você está usando, ordena os documentos retornados pela query, e não os elementos dentro de um array em um documento específico. 💡

Para ordenar os itens dentro do array "det", você precisará usar o operador $sort dentro de um pipeline de agregação. Veja um exemplo de como fazer isso:

db.collection.aggregate([
  {
    $addFields: {
      "det": {
        $sortArray: {
          input: "$det",
          sortBy: { "produto.descricao": 1 }
        }
      }
    }
  }
])

Neste exemplo:

  • $addFields adiciona ou sobrescreve campos no documento.
  • $sortArray ordena o array "det" com base no campo "produto.descricao" em ordem crescente (1).

Essa query irá retornar os documentos com o array "det" ordenado alfabeticamente pela descrição do produto. 👍

Ver mais: Documentação do $sortArray

Continue praticando e explorando as funcionalidades do MongoDB! 🤔

tux matrix Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓