2015-12-03 5 views
7

Ho iniziato con RethinkDB e ho qualche problema a capire cosa succede con alcune query che sto eseguendo.Time pseudotype invece di ISO8601 quando si utilizza l'operatore di gruppo

Il problema è l'interrogazione di oggetti con tipi di data e ora da un'app NodeJS (utilizzando il driver rethinkdbdash) che espone un'API JSON. Se interrogo miei oggetti singolarmente come:

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

ricevo JavaScript date per i campi timestamp, mentre se corro un gruppo dall'operatore nella query come in:

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

ottengo pseudotypes tempo data (Penso che questo sia il nome corretto) per gli stessi campi di timestamp. Qualcosa di simile:

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

È questo il comportamento previsto? Qual è la logica dietro?

Desidero restituire le date iso8601 serializzate nel mio JSON e non questo tipo di dati per rendere l'analisi trasparente ai client.

grazie,


UPDATE Questo era un problema noto per le versioni precedenti alla 2.2.7. Fixed here.

risposta

2

Sembra un errore in rethinkdbdash. Il server invia sempre orari ai client come pseudotipi (l'oggetto con il campo $reql_type$) ei client sono responsabili della trasformazione degli pseudotipi in oggetti tempo nativi (poiché i driver in lingue diverse devono farlo in modo diverso). Aprirei un bug a https://github.com/neumino/rethinkdbdash/issues.

direi la fonte del bug è che group restituisce un pseudotype GROUPED_DATA e rethinkdbdash non è la conversione correttamente pseudotypes che si trovano all'interno di altri pseudotypes. Se esegui db.table('apples').group('type').max('timestamp').ungroup(), questo potrebbe risolvere il problema per questa query fino a quando il driver non viene corretto.

+1

Grazie per la tua risposta, @mlucy, lo spacchettamento risolve effettivamente il problema in questo caso specifico. Lo porterò alle persone di rethinkdbdash. Grazie ancora. – Marc