【问题标题】:Mongodb query based on current time基于当前时间的MongoDB查询
【发布时间】:2021-09-15 02:49:43
【问题描述】:

我正在尝试进行一个 mongo 查询,该查询返回基于 $currentDate 的所有活动列表

{
  $and: [
    {
      start_time: {
        $lte: {
          $currentDate: {
            $type: "date"
          }
        }
      }
    }, 
    {
      end_time: {
        $gte: {
          $currentDate: {
            $type: "date"
          }
        }
      }
    }
  ]
}

但如果我将 end_time:{$gte 设置为 {$lte ALL 列表显示,它什么也不返回,所以一定有问题

我正在使用 javascript 将日期放入数据库中

if (checked) {
  var d = new Date()
  d.setSeconds(d.getSeconds() + values.sale_price * 100)
  setFieldValue('start_time', { date: new Date() })
  setFieldValue('end_time', { date: d })
}

我认为在结束时间添加秒数时可能会搞砸,但不确定

这是一个数据库文档的副本

{
  "_id": {
    "$oid":"61401b66t4e445t5j43j748e"
  },
  "name": "test",
  "sale_price": {
    "$numberInt": "5000"
  },
  "start_time": {
    "date": "2021-09-14T03:47:31.918Z"
  },
  "end_time":{
    "date": "2021-09-19T22:40:51.918Z"
  }
}

【问题讨论】:

  • $currentDate 用于更新文档,不能在查询中使用。

标签: javascript mongodb datetime mongodb-query


【解决方案1】:
db.collection.find({
  $and: [
    {
      "start_time.date": {
        $lte: new Date()
      }
    },
    {
      "end_time.date": {
        $gte: new Date()
      }
    }
  ]
})

在这里工作example

注意:确保start_time.dateend_time.date 的数据类型是日期而不是字符串

【讨论】:

  • 谢谢! @chandan 我看到它在操场上工作,但不在我的项目上,这可能是我输入 js 日期的方式吗?
  • 它上面的javascript代码``` setFieldValue('start_time', { date: new Date() })```我认为mongo没有将它解析为ISODate
  • @dovigz 分享setFieldValue 实现
猜你喜欢
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 2017-12-22
  • 2021-05-14
相关资源
最近更新 更多