javascript date filter rethinkdb

RethinkDB JavaScript Fecha filtro



date filter (2)

Intento consultar solo cosas que tienen menos de un día de antigüedad ... en JS esto devuelve verdadero; ¿Por qué repensar no es cierto, por lo que tampoco devuelve ningún resultado?

r.db( "db" ).table("table") .filter( function (item) { var now = new Date(), then = new Date( item.upload_date ); return now - then > 1000*60*60*24 });

Lo he intentado también:

r.db( "db" ).table("table") .filter( function (item) { var now = new Date(), then = new Date( item( "upload_date") ); return now - then > 1000*60*60*24 });

EDITAR: Definitivamente mi item( "upload_date" ) no devuelve la cadena de fecha ... ¿qué debería estar usando allí?


Creo que malinterpretaste ReQL. Se supone que la función de filtro se ejecuta en servidores, no en su cliente.

Tienes que cambiarlo a esto:

r.db( "db" ).table("table") .filter(r.now().sub(r.row(''upload_date'')).lt(60*60*24))

r.now() devuelve la hora actual, suponiendo que upload_date se almacena en el tiempo nativo de RethinkDB, puede subcontratar dos valores de tiempo, el resultado es la cantidad de segundos transcurridos. Entonces puede comparar con 60 * 60 * 24 (cuántos segundos en un día)

Escrito en estilo funcional será

r.db( "db" ).table("table") .filter(function(item) { return r.now().sub(item(''upload_date'')).lt(60*60*24)) })

Puede confundir que la forma en que está escrito se ve como JavaScript sin formato. Pero ese no es el caso. De hecho, el controlador del cliente evaluará la función en el cliente, para generar la consulta , en una cadena JSON que RethinkDB entiende y la enviará al servidor. No se ejecuta en el cliente para ejecutar la lógica de comparación. Genera una cadena JSON para decirle a RethinkDB lo que quiere usando la API que está disponible en http://rethinkdb.com/api/javascript . Más información sobre cómo funciona el controlador: http://rethinkdb.com/docs/writing-drivers/

En segundo lugar, si upload_date no está en un objeto nativo RethinkDB time, puede intentar convertirlo al tipo de hora RethinkDB para poder manipularlo fácilmente con algunas de estas funciones:

O simplemente trata de publicar tu tiempo aquí y te ayudaremos.


ReQL es lo suficientemente inteligente como para analizar cadenas y ordenarlas. Si tiene su fecha en el formato correcto, debe filtrar con .lt en la fila.

r.db("database").table("table") .filter( r.row(''upload_date'') .lt( new Date( new Date() - (24*60*60*1000) ).toISOString().replace(//..{4}/, '''').replace(/T/, '' '') ) )

-
Aclamaciones

--EDITAR--

(Para aprender o probar use Regex101.com)

Expresión regular solicitada en el método String.replace() :

PRIMERO - (Vuelca el final del código de tiempo)

por ejemplo: "2017-03-20T17: 17: 37.966Z" -> "2017-03-20T17: 17: 37"

  • Encuentra el primer período literal. /.
  • -> Y CUALQUIER 4 caracteres después de eso .{4}

Reemplazar el grupo de arriba con cita vacía, o nada

SEGUNDO -

por ejemplo: "2017-03-20T17: 17: 37" -> "2017-03-20 17:17:37"

  • Encuentra la primera instancia del personaje T

Reemplazar el grupo superior con un carácter de espacio o ""

Esto establece la cadena para poder comparar en el interior repensar db

AVISO: RethinkDB como un proyecto ha sido eliminado, pero será de origen abierto. Considere otros recursos para sus proyectos si necesita ayuda.