2015-12-03 7 views
7

Ich beginne mit RethinkDB und habe Probleme zu verstehen, was mit einigen Abfragen passiert, die ich gerade aktiviere.Zeitpseudotyp anstelle von ISO8601 bei Verwendung des Gruppenoperators

Das Problem abfragt Objekte mit Datum Zeit Typen aus einem NodeJS app (dem rethinkdbdash Treiber), die eine JSON API freilegt. Wenn ich meine Objekte einzeln abfragen möchten:

db.table('apples').max('timestamp'); 

ich JavaScript Termine für Zeitstempel Felder, während, wenn ich eine Gruppe von Operator in der Abfrage wie ausgeführt in:

db.table('apples').group('type').max('timestamp'); 

I Datum Zeit -Pseudotypen erhalten (Ich denke, das ist der richtige Name) für die gleichen Zeitstempelfelder. Etwas wie:

{ 
    "$reql_type$": "TIME", 
    "epoch_time": 1423077646.772, 
    "timezone": "-07:00" 
} 

Ist dies das erwartete Verhalten? Was ist die Logik dahinter?

Ich möchte serialisierte iso8601 Datumsangaben in meinem JSON und nicht diesem Datentyp zurückgeben, um das Parsen für Clients transparent zu machen.

Dank,


UPDATE Dies war ein bekanntes Problem für Versionen vor 2.2.7. Fixed here.

Antwort

2

Das sieht aus wie ein Fehler in rethinkdbdash. Der Server sendet immer Zeiten an die Clients als Pseudotypen (das Objekt mit dem Feld $reql_type$), und die Clients sind dafür verantwortlich, die Pseudotypen in native Zeitobjekte umzuwandeln (da Treiber in verschiedenen Sprachen das anders machen müssen). Ich würde einen Fehler bei https://github.com/neumino/rethinkdbdash/issues öffnen.

Ich würde vermuten, die Quelle des Bugs ist, dass group einen GROUPED_DATA Pseudotyp zurückgibt und rethinkdbdash Pseudotypen nicht korrekt konvertiert, die in anderen Pseudotypen sind. Wenn Sie db.table('apples').group('type').max('timestamp').ungroup() ausführen, kann das Problem für diese Abfrage behoben werden, bis der Treiber gepatcht wird.

+1

Vielen Dank für Ihre Antwort @mlucy, Ungrouping löst das Problem in diesem speziellen Fall. Ich werde es den rethinkdbdash Leuten bringen. Danke noch einmal. – Marc