Je suis perplexe sur casbah trouver. J'essaye de retirer tous les documents d'un MongoDB entre date1 et date2. Voici un exemple ensemble de mongo docs:trouver des entrées mongodb par joda DateTime gamme 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"}
Alors, disons que je veux retirer les documents de 27 septembre Comment dois-je procéder?
Dans la documentation de casbah, il semble que je pourrais construire un constructeur comme ceci:
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)
Dans mon IDE (Netbeans), cela ne compile pas parce que « $ est gte pas membre de java.lang .Chaîne". J'ai eu des résultats similaires avec les autres façons documentées de construire mon filtre.
Je suppose que le prochain problème que je voudrais, c'est qu'il ne sait pas comment comparer les dates, car ils sont stockés en tant que joda DateTimes, donc si quelqu'un a de l'expérience avec ces problèmes, j'apprécierais beaucoup de conseils.
Merci, John
SUIVI:
J'ai une solution partielle, mais seulement parce que j'utilisais les millisecondes comme le _id. Voici un code qui fonctionne pour ce cas:
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)
Je suis toujours intéressé par l'apprentissage d'une solution qui fonctionne sur DateTime au lieu du long Millis ...
Merci, c'est utile. – jxstanford
Si la disposition des données était ouverte pour les changements, @jxstanford pourrait également stocker les champs 'opentime' et' closetime' comme dates, mais cela perdrait leur caractère local (par exemple, les stocker en UTC). MongoDB devrait faciliter le travail avec les heures locales. – akauppi