使用 javascript 模板文字的猫鼬数组查询构造

mongoose array query construction with javascript template literals

我正在使用 mongodb 和猫鼬与 expressjs

我的数据库有以下数组:

_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"

在我的 expressjs 路由中,我正在尝试构建这样的查询:

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})      
 })
    
})

这确实有效并返回了正确的结果,除了我需要下面的行来包含模板文字或类似的东西,让我解释一下:

"schedule.1.availabletoday"

我需要用 getday 值替换 1。如果 getday 值为 0,则查询将为

"schedule.0.availabletoday"

如果 getday 值为 2,则查询将去寻找:

"schedule.2.availabletoday"

那么如何在我的查询中包含 getday 值,如下所示:

"schedule.getday.availabletoday"

我试过了

"schedule.${getday}.availabletoday"

但它返回了空结果,空的意思是:[]

我试过了

"schedule.getday.availabletoday"

查询返回空结果:[]

根据 mongodb 文档,要搜索数组元素,我需要在数组元素查询两边加上引号。所以我不能只写这个:

 schedule.getday.availabletoday

我是否需要更新我的节点或 expressjs 应用程序才能使用模板文字,还是我在这里缺少其他东西?

这应该适合你:

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}) 
})

使用模板字符串作为

`schedule.${getday}.availabletoday`

按照你的例子:

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})      
 })