2016-10-23 51 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')) 
    } 
})