estoy usando mongodb y mongoose con expressjs
Mi base de datos tiene la siguiente matriz:
_id:6262013fa90e7b533809140d isactive:true schedule:Array 0:Object 1:Object 2:Object 3:Object 4:Object 5:Object 6:Object name:"whatever" description:"describe somthing"En mi ruta expressjs, estoy tratando de crear una consulta como esta:
app.get("/getmenu", (req, res)=>{ let getdate = new Date() let getday = getdate.getDay()-1 Category.find({ "schedule.1.availabletoday" : "true" }, function(error, categories){ console.log("categories :", categories) res.json({"activecategories" : categories}) }) })Esto funciona y devolvió los resultados correctos, excepto que necesito la siguiente línea para incluir un literal de plantilla o algo equivalente, déjame explicarte:
"schedule.1.availabletoday"Necesito reemplazar el 1 con el valor getday. Si el valor de getday es 0, entonces la consulta será
"schedule.0.availabletoday"Si el valor de getday es 2, entonces la consulta buscará:
"schedule.2.availabletoday"Entonces, ¿cómo incluyo el valor getday en mi consulta para que sea así:
"schedule.getday.availabletoday"Lo intenté
"schedule.${getday}.availabletoday"pero devolvió resultados vacíos, por vacío me refiero a esto: []
Lo intenté
"schedule.getday.availabletoday"la consulta devolvió resultados vacíos: []
De acuerdo con el documento de mongodb, para buscar los elementos de la matriz, necesito las comillas alrededor de mi consulta de elementos de la matriz. Así que no puedo simplemente escribir esto:
schedule.getday.availabletoday¿Necesito actualizar mi aplicación de nodo o expressjs para poder usar literales de plantilla o hay algo más que me falta aquí?
Usar cadena de plantilla como
`schedule.${getday}.availabletoday`Según tu ejemplo:
app.get("/getmenu", (req, res)=>{ let getdate = new Date() let getday = getdate.getDay()-1 Category.find({ `schedule.${getday}.availabletoday` : true }, function(error, categories){ console.log("categories :", categories) res.json({"activecategories" : categories}) })Esto debería funcionar para usted:
let getdate = new Date(); let day = getdate.getDay()-1; let query = {}; query[`schedule.${day}.availabletoday`] = true; Category.find(query, (err, categories)=> { console.log("categories :", categories) res.json({"activecategories" : categories}) })