1
resposta

como ordenar por id {type: mongoose.Schema.Types.ObjectId}

Não consigo ordenar os livros por ordem decrescente pelo id; com 1 ou -1 o retorno é o mesmo(funciona para ordem alfabética do título)

a minha busca está dessa forma:

const listaLivros = await livro.find({})
      .sort({id: -1})
      .skip((pagina -1) * limite)
      .limit(limite);
      res.status(200).json(listaLivros);

A minha interface de livro está assim:

const livroSchema = new mongoose.Schema({
  id: {type: mongoose.Schema.Types.ObjectId},
  titulo: {
    type: String,
    required: [true, "O título do livro é obrigatório"]},
  editora: {
    type: String,
    required: true,
    enum: {
      values: ["letras", "ana"], 
      message: "A editora {VALUE} não é um valor permitido "
    }
  },
  preco: {type: Number},
  paginas: {
    type: Number,
    validate: {
      validator: (valor) =>{
        return valor >= 10 && valor <= 5000; 
      },
      message:  "o numero de páginas deve estar entre 10 e 5000. Valor fornecido: {VALUE}"
    }
  },
  autor: autorSchema
}, {versionKey: false});
 
const livro = mongoose.model("livros", livroSchema);
1 resposta

Olá, Ana! Tudo bem?

Pelo que entendi, você está tentando ordenar seus livros pelo id em ordem decrescente, mas não está conseguindo. O que pode estar acontecendo é que você está tentando ordenar pelo campo "id", mas no Mongoose o campo padrão para o id é "_id".

Então, ao invés de usar "id" na sua busca, você deveria usar "_id". Sua busca ficaria assim:

const listaLivros = await livro.find({})
      .sort({_id: -1})
      .skip((pagina -1) * limite)
      .limit(limite);
      res.status(200).json(listaLivros);

Aqui estamos usando o campo "_id" para ordenar os livros em ordem decrescente.

Espero ter ajudado e bons estudos!