date - seleccionar - Cómo manejar las fechas en neo4j
manejo de fechas en sql server (3)
La forma más común de tratar las fechas en Neo4j es almacenarlas como una representación de cadena o como milis desde época (también conocida como msec, aprobada desde el 1 de enero de 1970).
El primer enfoque hace que el gráfico sea más fácil de leer, el último le permite hacer cálculos, por ejemplo, calcular deltas.
En su caso, almacenaría dos propiedades llamadas validFrom
y validTo
en las relaciones. Sus consultas deben asegurarse de estar buscando el intervalo de tiempo correcto.
Por ejemplo, para encontrar el / los rey (s) a cargo de Francia desde el 1 de enero de 1220 hasta el 31 de diciembre de 1221, haga lo siguiente:
MATCH (c:Country{name:''France''})-[r:HAS_KING]->(king)
WHERE r.validFrom >= -23667123600000 and r.validTo <=-23604051600000
RETURN king, r.validFrom, r.validTo
apéndice
Desde Neo4j 3.0 existe la biblioteca APOC que proporciona un par de funciones para convertir las marcas de tiempo a / de cadenas de fecha legibles por el ser humano .
Soy un historiador de la historia medieval y estoy intentando codificar las redes entre reyes, duques, papas, etc. durante un período de aproximadamente 50 años (desde 1220 a 1270) en la Alemania medieval. Como no soy especialista en bases de datos de gráficos, estoy buscando la posibilidad de manejar fechas y fechas.
¿Hay alguna posibilidad de manejar un rango de fechas hasta un borde para que los bordes, que representan una relación, desaparezcan después de, por ejemplo, 3 años?
¿Hay alguna posibilidad de solicitar relaciones que tengan su etiqueta de fecha en un rango de fechas?
Otra opción para fechas que mantiene la cantidad de nodos / propiedades que crea bastante bajas es una lista vinculada años (primer año de interés - último año), uno de meses (1-12) y una de fechas en un mes (1- 31). Luego, cada "evento" en su gráfico se puede conectar a un año, mes y día. De esta forma, no es necesario crear un nuevo nodo para cada nueva combinación de un mes, mes y día. Solo tiene un único conjunto de meses, uno de días y un año. Escalo los números para hacerlos más fáciles de manipular así
Los años son aaaa * 10000
Los meses son mm * 100
La fecha es dd
así que si ejecuta una consulta como
match (event)-[:happened]->(t:time)
with event,sum(t.num) as date
return event.name,date
order by date
Obtendrá una lista de todos los eventos en orden cronológico con fechas como Janurary 17th, 1904 apareciendo como 19040117 (formato aaaammdd)
Además, dado que estas son listas vinculadas donde, por ejemplo, ...- (t0: time {num: 19040000}) - [: precede] -> (t1: time {num: 19050000}) -... en los nodos también.
Esto es, hasta ahora, cómo me gustó hacer mi cita del evento
También puede almacenar las fechas en su representación numérica en el siguiente formato: YYYYMMDD
En su caso, 12200101
sería el 1 de enero de 1221 y el 12701231
sería el 31 de diciembre de 1270.
Es un formato útil y legible, y puedes realizar búsquedas de rango como:
MATCH (h:HistoricEvent)
WHERE h.date >= 12200101 AND h.date < 12701231
RETURN h
También le permitiría ordenar por fechas, si es necesario.