Esta es probablemente una pregunta vergonzosa, pero estoy intentando representar una búsqueda de usuario basada tanto en la búsqueda de ubicación como en la fecha. Nuestro objeto de perfil está estructurado de la siguiente manera;
availability: {
monday: { type: Boolean, default: false },
tuesday: { type: Boolean, default: false },
wednesday: { type: Boolean, default: false },
thursday: { type: Boolean, default: false },
friday: { type: Boolean, default: false },
saturday: { type: Boolean, default: false },
sunday: { type: Boolean, default: false },
}
Aquí está mi controlador;
exports.findUsersByDay = asyncHandler(async (req, res) => {
const search = req.params.search;
try {
const profileList = await Profile.find({
availability: { $in: search }
});
if (profileList.length > 0) {
return res.status(200).json({ profiles: profileList });
} else {
return res.status(404).json({ message: "No Profiles Found" });
}
} catch (error) {
return res.status(500).json({ message: error });
}
})
¿Cómo puedo consultar si el objeto de perfil tiene una de las fechas (o varias si se transmite como una matriz) a verdadera?
Puede crear una consulta dinámica para esto. Obtenga todos los días que desee y utilícelo junto con $ y :
let findQuery = { $and : [ ]};
let search = ['monday','thursday']; search.forEach((a)=>{
let aName = `availability.${a}`
findQuery['$and'].push({
[aName] : true
})});
const profileList = await Profile.find(findQuery);
Creo que se podría hacer algo similar usando $ where también, pero el rendimiento se verá afectado.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras