2016-10-23 37 views
0

我有一个支付日期字段存储为字符串YYYY-MM-DD的mongo db(我不能更改这些是如何不幸的),我需要做一个日期范围搜索他们。猫鼬 - 按日期范围存储为字符串的搜索日期

我发现一个帖子提示是这样的:

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

但我似乎无法得到这在所有的工作。

任何帮助表示赞赏,我在这里遇到了一个死胡同。

+0

是要用作最小值和最大值不断使用日期? – nicovank

+0

日期范围将更改并作为参数提供。这仅用于测试目的。 – Mankind1023

回答

2

存储日期为YYYY-MM串-DD格式工作正常,在这种情况下,该字符串匹配排序日期排序,所以你可以这样做:

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

有一个证明会好得多,无论如何你得到我的+1,考虑加入一些工作样品请 –

+0

这似乎工作得很好。 – Mankind1023

0

您的第一个目标应该是更改模式并使用Date而不是String。但是,如果它真的不可能的,你不能想到的一个非常复杂的RegEx,您可以使用$whereJavascript做到这一点,但它的性能会慢得多:

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