Mongodb根据日期查询

Posted

技术标签:

【中文标题】Mongodb根据日期查询【英文标题】:Mongodb query according to dates 【发布时间】:2020-04-17 08:29:34 【问题描述】:

您好,我正在尝试查找仅在 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-$pdateT00: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)

它提供所有文档,每个供应商 ID 都是在 D-1 日创建的

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

【问题讨论】:

【参考方案1】:

这假定 vendorId 是 MongoDB 中文档的 id。您需要使用ObjectId(...) 投射id。 try/catch 也需要包含 find ,否则不会捕获数据库错误。

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://***.com/a/38455992/238847

MondoDB 对象 ID:https://mongodb.github.io/node-mongodb-native/2.0/tutorials/objectid/

【讨论】:

谢谢斯坦,我试过你的答案,但它返回空文档,我认为我从 nodejs 查询日期与保存在 Mongo 中的日期的方式有些不匹配,如果你能提出任何建议

以上是关于Mongodb根据日期查询的主要内容,如果未能解决你的问题,请参考以下文章

mongodb isodate怎么查询

Mongodb Aggregate - $sum 如果在日期之间添加值

nodejs,mongodb不同时区问题

在mongodb中查询日期

在mongodb中查询日期

使用 MongoDB 和 Nodejs 插入和查询日期