2011-10-19 151 views
2

我有一個具有start_time和end_time屬性的文檔的集合。該文件的strucute如下:使用mongoDB查詢日期或時間

{ 
_id  "4e9650ed1d41c811bc000000" 
bid  31.0 
start_time 2011-04-04 09:30:00 UTC 
volume 31.0 
end_time 2011-04-04 09:59:59 UTC 
ask  0.0 
price 1329.75 
} 

我希望能夠拉開日期字段爲日期和時間的組件和查詢每個seperately。示例查詢是:

找我,是(9:00至9:30)之間之間(2011-04-04 2011-05-04和)

回答

1

所有文件如果空間不是問題來存儲更多的非規範化的領域,你是在應用程序設計部分(所以你不必回來和修改現有的數據),你可以:

  • 商店開始小時和結束小時作爲保持小時/分鐘的附加屬性。
  • 上應用複合索引start_time,start_hourend_time,end_hour所以您的搜索性能很好。
  • 對所有四個字段運行查詢。

見樣本文檔:

{ 
    _id: "4e9650ed1d41c811bc000000", 
    bid: 31.0, 
    start_time: 2011-04-04 09:30:00 UTC, 
    start_hour: "09:30:00", // new field 
    volume: 31.0, 
    end_time: 2011-04-04 09:59:59 UTC, 
    end_hour: "09:59:59", // new field 
    ask: 0.0 , 
    price 1329.75 
} 

似乎回答了你的問題是,你不能日期和時間的成分有效地查詢分離,例如採用指數的優勢,速度查詢。

我上面的建議需要稍微改變你的模式來實現你所需要的。看起來,它會爲每個文檔的額外幾個字節的犧牲以及次要代碼的改變付出極大代價。

如果您有現有數據,則可以運行Map/Reduce將這些組件分離爲一個新集合並使用該新集合。

我希望這會有所幫助。