Dieser Post wurde aus meiner alten WordPress-Installation importiert. Sollte es Darstellungsprobleme, falsche Links oder fehlende Bilder geben, bitte einfach hier einen Kommentar hinterlassen. Danke.
Gerade habe ich MongoDB noch hoch gelobt, da kostet mich eine Schlampigkeit im MongoDB-Treibermodul für Perl einen halben Arbeitstag.Eigentlich war die Aufgabe ganz einfach: Alle Dokumente finden, die einen Unix-Timestamp größer als "x" haben.In MongoDB/Perl bedeutet das {date => { '$gt' => 13206775 } }, eigentlich ganz einfach. Wenn man allerdings den Zeitstempel als HTTP-Parameter bekommt und das MongoDB-Modul die Entscheidung über den Datentyp C-Source überlässt, anstatt diese - wie üblich - in Perl zu treffen. So wurde aus meinem Timestamp ein Text und der verträgt sich nunmal nicht sonderlich gut mit einem nummerischen Vergleich.Fazit: $var + 0 und schon ist eine Zahl auch für das MongoDB-Modul eine Zahl.Wer denkt schon an das Naheliegende... Der Bug ist im RT natürlich beschrieben, leider sieht die aktuelle Maintainerin keinen Bedarf für einen Fix. Schade eigentlich.
3 Kommentare. Schreib was dazu-
Sebastian
12.07.2011 8:52
Antworten
-
sonyon
13.07.2011 0:10
Antworten
-
Sebastian
13.07.2011 20:02
Antworten
So schnell ist die Welt... nachdem der RT Bug seit April unverändert da lag, hat sich gestern nach meinem Eintrag noch viel getan: Kristina, MongoDB-Modul-Maintainerin, möchte den Bug jetzt doch fixen. Danke!!!
Also richtig spektakulär wäre es wenn sie endlich mal ein Datetime Feld einbauen.^^
Den haben sie: http://www.mongodb.org/display/DOCS/Java+Types#JavaTypes-Dates%2FTimes
Allerdings sehe ich keinen Sinn, die von SQL angefangene endlose Konvertiererei zwischen Unixtimestamp und SQL-DateTime's fortzusetzen, deswegen unixtimes in der Datenbank.