【问题标题】:Query mongodb for a specific date range查询特定日期范围的 mongodb
【发布时间】:2021-01-03 17:44:21
【问题描述】:

我已经用谷歌搜索了这个,但对于我的生活,我无法让它工作......我知道我只是错过了一些完全简单的东西,所以我希望这里有人可以拯救我的理智。

我正在尝试根据日期范围从 mongodb 集合(使用 mongoose)中查找一系列文档。

我有这个代码:

var startDate = new Date(req.query.startDate);
var stopDate = new Date(req.query.stopDate);

studentProgression.find({ $and: [ {'ACT_START': {$gte: startDate, $lte: stopDate} } ]})

但它不返回任何文件。

MongoDb 集合中的日期存储为字符串,如下所示(例如):

ACT_START:“20 年 5 月 25 日” 一种 我知道我很可能在某个地方绊倒,因为它是一个字符串而不是 mongo 中的日期对象,因为我以前没有遇到过这个问题。我宁愿不浏览集合并将所有字符串日期更改为实际日期对象。

是否可以按照我的说明进行查找?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    很遗憾,您必须更改 ACT_START 字段的格式并将其转换为日期。

    通过在字符串字段上执行$gte 和/或$lte,mongo 将根据它们的字母顺序比较两个字符串。

    【讨论】:

    • 有没有办法在我每次查询时“即时”执行此操作?我以前从未使用过聚合,这是可以做到的吗?还是只在收藏中更改一次并继续生活会更好?现在大约有 500,000 份文件,而且还在增加。
    • 是的,您可以通过聚合来实现。第一部分将更改您的字段类型,第二部分将匹配您的文档与$gte$lte。但是,如果它是您经常运行的查询,或者您想按日期排序。我建议您更改一次字段,因为它会更高效。随着您的集合不断增长,这将更有优势,但如果您运行其中一些查询,聚合是这里最好和最简单的事情。
    • 太棒了,感谢您的反馈。我可能会改变日期的格式并继续生活。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2014-09-29
    相关资源
    最近更新 更多