Estou tentando fazer um filtro dinâmico para o autor no livros usando regex, estou conseguindo achar o autor e retornar o id dentro da função que processa a busca, mas ao chegar no filtro, ele está retornando um objeto vazio. O que estou fazendo de errado?
static async requestBookByFilter(req, res, next) {
try {
const search = await processSearch(req.query);
const filteredSearch = await books.find(search);
if (filteredSearch !== null && filteredSearch.length !== 0) {
res.status(200).json(filteredSearch);
} else {
res.status(200).send([]);
}
} catch (err) {
next(err);
}
};
};
async function processSearch(params) {
const { title, publisher, price, minPages, maxPages, author } = params;
let search = {};
if (minPages || maxPages) search.pages = {};
if (title) search.title = { $regex: title, $options: 'i' };
if (price) search.price = { $eq: price };
if (publisher) search.publisher = { $regex: publisher, $options: 'i' }; // OR new RegExp(publisher, 'i')
if (minPages) search.pages.$gte = minPages;
if (maxPages) search.pages.$lte = maxPages;
if (author) {
const authorName = await authors.findOne({name: {$regex: author, $options: 'i'}});
const authorId = authorName._id;
console.log(authorName);
if (authorName !== null) {
search.author = authorId;
console.log(search.author);
} else {
search = null;
}
}
return search;
}