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

Problemas com busca do ID recente

Estou com um certo problema na hora da busca pelo id de maneira crescente ou decrescente. Onde ao pedir o resultado no Postman, ele retorna o mesmo valor independentemente se o valor é -1 ou 1.
Meu sistema de busca:

static async ListarLivros (req, res, next){
        try {
            let {limite = 5, pagina = 1} = req.query; 

            limite = parseInt(limite);
            pagina = parseInt(pagina);

            if(limite > 0 && pagina > 0) {
                const listaLivros  = await livro.find()
                .sort( { titulo: -1 } )
                .skip ((pagina - 1) * limite)
                .limit(limite)
                .populate("autor")
                .exec();
                res.status(200).json(listaLivros);
            } else {
                next (new RequisicaoIncorreta ());
            }
            
        } catch (error) {
            next(error);
        }
    }

Meu Schema Livro:

import mongoose from "mongoose";

const livrosSchema = mongoose.Schema({
    id: { type: mongoose.Schema.Types.ObjectId },
    titulo: { 
        type: String, 
        required: [true, `o título do livro é obrigatório`]
    },
    autor: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "autores",
        required: [true, 'o(a) autor(a) é obrigatório']
    },
    editora: { 
        type: String,
        required : [true, `a editora é obrigatória`],
        enum: {
            values: ["Casa do Codigo", "Alura"],
            message: "A editora {VALUE} não está registrada em nosso banco de dados... "
        }
    },
    paginas: { 
        type: Number,
        min: [5, "O número de paginas deve ser maior que 5. Valor inserido: {VALUE}"],
        max: [5000, "O número de paginas deve ser menor que 5000. Valor inserido: {VALUE}"]
     }
    
},{ versionKey: false });

const livro = mongoose.model("livros", livrosSchema);

export default livro;
1 resposta
solução!

Olá Ismael.
Tudo bem?
Vamos tentar resolver este problema.
O problema pode estar na parte de ordenação do código, onde você está utilizando .sort({ titulo: -1 }), o que está ordenando os livros pelo título em ordem decrescente, e não pelo id ou qualquer outro campo.
Para resolver o problema de ordenação crescente ou decrescente pelo campo id, você precisa ajustar a forma como está configurando a ordenação.
O seu código está fazendo a ordenação pelo campo titulo da seguinte maneira:

.sort({ titulo: -1 })

Isso faz com que a ordenação seja realizada pelo título do livro, não pelo campo id. O valor -1 significa decrescente, e 1 significa crescente.
Se você quiser ordenar os resultados com base no campo id do livro de forma crescente ou decrescente, você precisa ajustar a chave de ordenação para o campo id de acordo com o parâmetro de consulta.
Você pode usar a lógica para decidir a ordem com base no valor do parâmetro de consulta.
Aqui está uma sugestão para modificar o seu código para permitir a ordenação pelo id de forma crescente ou decrescente:

  1. Primeiro, adicione um parâmetro na consulta para determinar a ordenação pelo id.
  2. Ajuste a lógica da ordenação para lidar com o parâmetro que pode ser 1 (crescente) ou -1 (decrescente).
static async ListarLivros(req, res, next) {
    try {
        let { limite = 5, pagina = 1, ordenacao = 1 } = req.query;

        limite = parseInt(limite);
        pagina = parseInt(pagina);
        ordenacao = parseInt(ordenacao); // 1 para crescente, -1 para decrescente

        if (limite > 0 && pagina > 0) {
            const listaLivros = await livro.find()
                .sort({ id: ordenacao }) // Ordenando pelo campo id com base no parâmetro de ordenação
                .skip((pagina - 1) * limite)
                .limit(limite)
                .populate("autor")
                .exec();

            res.status(200).json(listaLivros);
        } else {
            next(new RequisicaoIncorreta());
        }
    } catch (error) {
        next(error);
    }
}

Explicação:

  • Agora, você tem um parâmetro ordenacao na query string, que pode ser 1 para crescente e -1 para decrescente.
  • O valor padrão é 1 (crescente).
  • Ao invés de ordenar pelo campo titulo, você está ordenando pelo campo id com base no valor de ordenacao.

Para pegar os livros ordenados pelo id de forma crescente:

GET http://localhost:3000/livros?limite=5&pagina=1&ordenacao=1

Para pegar os livros ordenados pelo id de forma decrescente:

GET http://localhost:3000/livros?limite=5&pagina=1&ordenacao=-1

Isso deve corrigir o seu problema e permitir que a ordenação funcione corretamente.
Atenção!
Se você quiser ordenar por outro campo (por exemplo, titulo ou autor), basta ajustar o campo dentro do .sort().
O que está acontecendo agora é que você estava sempre ordenando pelo campo titulo, mas se deseja ordenação pelo id, é preciso fazer essa alteração no código, como mostrado.
Qualquer duvida avise ai.
Bons estudos.