【问题标题】:Mongoose - Search dates stored as strings by date rangeMongoose - 按日期范围搜索存储为字符串的日期
【发布时间】:2016-10-23 21:18:27
【问题描述】:

我有一个 mongo db,其中 paymentDate 字段存储为字符串 YYYY-MM-DD(不幸的是,我无法更改这些字段),我需要对它们进行日期范围搜索。

我发现一个帖子建议是这样的:

coll.find({paymentDate: new RegExp("^(2016-02-18|2016-06-19)", "i")});

但我似乎根本无法让它发挥作用。

感谢任何帮助,我在这里遇到了死胡同。

【问题讨论】:

  • 您想将日期用作最小和最大常量吗?
  • 日期范围会改变并作为参数提供。这仅用于测试目的。

标签: node.js mongodb mongoose


【解决方案1】:

在这种情况下,将日期存储为 YYYY-MM-DD 格式的字符串可以正常工作,因为字符串排序与日期排序匹配,因此您可以这样做:

coll.find({paymentDate: {$gte: "2016-02-18", $lte: "2016-06-19"}});

【讨论】:

  • 有证明会好很多,反正你得到我的 +1,请考虑添加一些工作样本
【解决方案2】:

您的第一个目标应该是更改架构并使用Date 而不是String。但是如果实在不行,又想不出一个很复杂的RegEx,可以用Javascript$where来做,但是性能会慢很多:

db.test.find({
    $where: function () {
        var docDate = new Date(this.paymentDate);
        return (docDate >= new Date('2016-02-18') && docDate <= new Date('2016-02-19'))
    }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2014-07-23
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多