2010-11-27 42 views
5

我很難找到casbah。我試圖從date1和date2之間撤回MongoDB中的所有文檔。這裏有一個例子設置蒙戈文檔的:由joda發現mongodb條目DateTime範圍scala/casbah

{ "_id" : NumberLong("1285248838000"), "openTime" : "Thu Sep 23 2010 06:33:58 GMT-0700 (PDT)", "closeTime" : "Thu Sep 23 2010 06:36:15 GMT-0700 (PDT)", "timeInTrade" : "00:02:17", "direction" : "Long", "size" : 1, "outcome" : "Loss" } 
{ "_id" : NumberLong("1285595711000"), "openTime" : "Mon Sep 27 2010 06:55:11 GMT-0700 (PDT)", "closeTime" : "Mon Sep 27 2010 06:57:37 GMT-0700 (PDT)", "timeInTrade" : "00:02:26", "direction" : "Short", "size" : 1, "outcome" : "Win"} 
{ "_id" : NumberLong("1285594773000"), "openTime" : "Mon Sep 27 2010 06:39:33 GMT-0700 (PDT)", "closeTime" : "Mon Sep 27 2010 06:41:47 GMT-0700 (PDT)", "timeInTrade" : "00:02:14", "direction" : "Short", "size" : 1, "outcome" : "Win" } 
{ "_id" : NumberLong("1286289026000"), "openTime" : "Tue Oct 05 2010 07:30:26 GMT-0700 (PDT)", "closeTime" : "Tue Oct 05 2010 07:36:23 GMT-0700 (PDT)", "timeInTrade" : "00:05:57", "direction" : "Short", "size" : 2, "outcome" : "Loss"} 

所以,讓我們說,我想給拉了回來,從九月27.我將如何去這樣做的文件?

在卡斯巴文檔,它看起來像我可以構建這樣一個建設者:

val dt = new DateTime("2010-09-27T00:00:00.000-08:00") 
val bldr = MongoDBObject.newBuilder 
bldr += "openTime" $gte dt $lt dt.plusDays(1) 
val result = coll.find(bldr.result) 

在我的IDE(Netbeans的),這將不能編譯,因爲「$ GTE是不是java.lang中的一員。串」。我用其他記載的方法構建了我的過濾器,結果類似。

我懷疑我會遇到的下一個問題是它不知道如何比較日期,因爲它們存儲爲joda DateTimes,所以如果任何人有這些問題的經驗,我將不勝感激一些指導。

感謝, 約翰

後續:

我已經得到了部分解決方案,但僅僅是因爲我用的是毫秒爲_id。下面是一些代碼,對於這種情況下的工作原理:

val begin = dt.getMillis 
val end = dt.plusDays(1).getMillis 
val json = "{ '_id' : { '$gte' : " + begin + " , '$lt' : " + end + "}}" 
val dbObject = JSON.parse(json).asInstanceOf[DBObject]; 
for (x <- coll.find(dbObject)) println(x) 

我仍然有興趣學習有關的日期時間,而不是龍米利斯有效的解決方案......

回答

1

opentime被存儲爲一個字符串蒙古方面。您的$ gte功能不起作用b/c字符串比較不起作用。

爲了使這項工作,你必須使用$ where子句和正確執行比較的功能。所以你基本上必須編寫一個正確解釋JODA時間的javascript函數。然後,您必須在數據庫調用中包含該功能,否則必須將其存儲在服務器端並從此處繼續。

以下是關於where clause的一些詳細信息。這裏是關於server-side code execution的一些細節。

+0

謝謝,這很有幫助。 – jxstanford 2010-11-29 22:40:27