Estoy perplejo en encontrar casbah. Estoy intentando retirar todos los documentos de un MongoDB entre date1 y date2. Aquí está un ejemplo de documentos mongo:buscando entradas mongodb por joda Rango 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"}
Por lo tanto, digamos que quiero tirar de los documentos de SEP 27. ¿Cómo voy a ir haciendo eso?
En la documentación casbah, parece como si pudiera construir un constructor de la siguiente manera:
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)
En mi IDE (Netbeans), esto no va a compilar porque "$ gte no es miembro de java.lang .Cuerda". Obtuve resultados similares con las otras formas documentadas de construir mi filtro.
Sospecho que el siguiente problema que tendría es que no sabe cómo comparar las fechas porque están almacenadas como joda DateTimes, por lo que si alguien tiene experiencia con estos problemas, agradecería mucho alguna orientación.
Gracias, John
SEGUIMIENTO:
Tengo una solución parcial, pero sólo porque yo estaba usando los milisegundos como _ID. Aquí hay un código que funcione para ese caso:
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)
Todavía estoy interesado en aprender acerca de una solución que funciona en DateTime en lugar del largo millis ...
Gracias, eso es útil. – jxstanford
Si el diseño de datos estuviera abierto para cambios, @jxstanford también podría almacenar los campos 'tiempo de operación' y' tiempo de cierre 'como fechas, pero eso perdería su tiempo local (por ejemplo, almacenarlos como UTC). MongoDB debería facilitar el trabajo con las horas locales. – akauppi