首页 > 解决方案 > Mongodb根据日期查询

问题描述

嗨,我正在尝试查找仅在 D-1 天保存的文件

问题:我在 24 小时内创建了所有文档,但我想根据创建它的 id 来获取它们

//这是我的代码

exports.getPreviousDayOrder = async (req,res,next) =>{
   vendorId=req.params.id
   let d= new Date()
   let pdate =d.getDate()-2
   let month = d.getMonth()+1
   let year = d.getFullYear()
  previousDay= `${year}-${month}-${pdate}T00:00:00.000Z`
  currentDay= Date.now

   const vendorOrder = await Order.find({vendorId,createdDate:{$gt:previousDay},$lt:currentDay})
      try {
          if (!vendorOrder) {
            const error = new Error('Could not find Order.')
            error.statusCode = 404;
            throw error;
          }
          res.status(200).json({message:'VendorOrder fetched.',vendorOrder})
        }  catch(error) {res.send(error)}
             next(error)
        }

这是我从邮递员那里得到的答复——一个空文件

{
    "message": "VendorOrder fetched.",
    "vendorOrder": []
}

我尝试过的其他查询

const vendorOrder = await Order.find({createdDate:{$gt:previousDay},$lt:currentDay})

它提供了在 D-1 日创建的每个供应商 ID 的所有文件

如果我:/id从我的路线中删除,那么我将获取所有具有登录 ID 的文档,因为存在令牌身份验证。

标签: mongodb

解决方案


这假设这vendorIdidMongoDB 中的文档。您将需要转换idusing ObjectId(...)。此外,try/catch 需要包含查找,否则将不会捕获数据库错误。

try{
  const vendorOrder = await Order.find({
      vendorId:mongoose.Types.ObjectId(req.params.id),
      createdDate:{$gt:previousDay},
      createdDate:{$lt:currentDay}
  })
  if (!vendorOrder) {
    const error = new Error('Could not find Order.')
    error.statusCode = 404;
    throw error;
  }
  res.status(200).json({message:'VendorOrder fetched.',vendorOrder})
}  
catch(error) {res.send(error);next(error)}

更多示例:https ://stackoverflow.com/a/38455992/238847

MondoDB ObjectID:https ://mongodb.github.io/node-mongodb-native/2.0/tutorials/objectid/


推荐阅读