【问题标题】:How do I fetch all mongo data which is created greater than a particular date?如何获取创建时间大于特定日期的所有 mongo 数据?
【发布时间】:2023-03-20 00:33:01
【问题描述】:

我读到必须使用 $gt 属性。无法解决这个问题。假设我有一些这样的 mongo 数据:

{
    "startTime" : "Sun 25 Jan 2015 07:14:26 GMT",
    "endTime" : "",
    "jobStatus" : "JOBCANCELLED",
    "uiState" : "HISTORY",
    "priority" : "SILVER"
}

这就是我在 Mongo 中保存开始时间的方式。如果我想获取开始时间大于今天的所有作业的状态,我该怎么做?

db.getCollection('jobsCollection').find({"startTime":{$gt: "What here?"})

【问题讨论】:

  • 试试这样的:db.getCollection('jobsCollection').find({"startTime":{$gt: new Date("2015-01-01")});.
  • 您必须将 startTime 字段从字符串转换为 ISODate 对象,日期查询运算符才能工作。在Stack Overflow 搜索 mongo 和 date,你会发现很多关于同一问题的问题
  • @Martin 有什么办法可以暂时将 startTime 字段转换为 ISODate 并进行查询,这样我就不会改变我的 mongo?换句话说,我想在没有用户回答的save 的情况下这样做。

标签: mongodb pymongo


【解决方案1】:

首先您需要将您的 startTime 从字符串格式转换为日期时间格式。

从 mongo shell 执行:

 db.jobsCollection.find().forEach(function(doc){doc.startTime = new Date(doc.startTime);db.jobsCollection.save(doc)});

然后您可以编写大于日期的查询:

db.jobsCollection.find({"startTime":{$gt: new Date("2014-02-10")});

如果您遇到任何问题,请告诉我。

【讨论】:

  • 这会改变数据库,不是吗?
  • 会的。在 MongoDB 中将日期数据存储为字符串是没有意义的。
  • 是的,将日期存储为字符串而不是日期对象是没有意义的。谢谢您的建议。将此答案标记为正确!
  • 我的 mongo 很大。由于日期已经存储为字符串,因此第一行从字符串转换为 ISODate 需要花费大量时间。我将保留未标记为正确的答案,因为我需要在不更改数据库的情况下找到一种方法。
  • @abhidoeslinux :除非您编写复杂的正则表达式并测试所有可以解决问题的案例,否则它将仅在指定日期有效。还有一句名言“有些人在遇到问题时会想”我知道,我会使用正则表达式。现在他们有两个问题。” - Source
猜你喜欢
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2015-09-01
  • 1970-01-01
  • 2018-04-23
  • 2021-12-23
相关资源
最近更新 更多