Saltearse al contenido

Operadores y funciones

La superficie v0 cubre cada operador y función integrada listada en RFC-004 más algunas adiciones de releases posteriores (vector(), shortestPath, allShortestPaths).

Operadores

Aritméticos

+, -, *, /, % (módulo), ^ (potencia).

RETURN 2 + 3 AS a, 10 % 3 AS b, 2 ^ 10 AS c

String

  • + concatena strings.
  • =~ es el operador de match de regex (estilo PCRE).
RETURN p.first_name + ' ' + p.last_name AS full_name
MATCH (p:Person) WHERE p.email =~ '.+@example\\.com$' RETURN p

Booleanos

AND, OR, NOT, XOR. Lógica de tres valores — consulta Subset soportado § Semántica de NULL.

Comparación

=, <>, <, <=, >, >=. La igualdad y el orden siguen las reglas de Cypher; = entre NULL y cualquier cosa devuelve NULL, no false.

Tests de null

IS NULL, IS NOT NULL.

MATCH (p:Person)
WHERE p.country IS NOT NULL
RETURN p.name, p.country

Membership y predicados de string

  • x IN [...] — membership en lista.
  • s STARTS WITH 'A', s ENDS WITH '!', s CONTAINS 'lic' — predicados de string.
MATCH (p:Person)
WHERE p.country IN ['US', 'CA', 'MX']
AND p.name STARTS WITH 'A'
RETURN p

CASE

Las formas simple y multi-branch parsean ambas.

RETURN CASE
WHEN p.age < 18 THEN 'menor'
WHEN p.age < 65 THEN 'adulto'
ELSE 'mayor'
END AS bracket

List y pattern comprehension

RETURN [x IN $values WHERE x > 0 | x * 2] AS doubled_positives
MATCH (p:Person)
RETURN p.name, [(p)-[:KNOWS]->(f) | f.name] AS friend_names

Funciones integradas

Agregaciones

FunciónDescripción
count(*)Conteo de filas.
count(x)Conteo no-null de x.
count(DISTINCT x)Conteo distinto no-null.
sum(x)Suma.
avg(x)Media aritmética.
min(x) / max(x)Mínimo / máximo.
collect(x)Acumula filas en una lista.
collect(DISTINCT x)Igual, deduplicado.

Escalares

FunciónDescripción
id(n)NodeId interno de un nodo, o el id de la arista.
labels(n)Lista de strings de label en un nodo.
type(r)El string del edge_type de una relación.
keys(n)Lista de nombres de property declarados en un nodo / rel.
properties(n)Map de properties de un nodo / rel como MAP<STRING, T>.
length(p)Número de hops en un PATH.
size(coll)Longitud de una lista, map o string.
head(coll)Primer elemento de una lista.
last(coll)Último elemento de una lista.
tail(coll)La lista sin su primer elemento.
coalesce(x, …)Primer argumento no-null, o NULL si todos son null.

String

toLower(s), toUpper(s), trim(s), substring(s, start[, length]), replace(s, find, repl), split(s, sep), toString(x), toInteger(x), toFloat(x).

RETURN toLower(trim(p.email)) AS normalized

Numéricas

abs(x), ceil(x), floor(x), round(x), rand(), sign(x).

Temporales (solo constructores)

date(iso), datetime(iso), duration(iso). El constructor acepta strings ISO-8601; el álgebra temporal completa queda fuera de scope en v0.

WITH datetime('2026-01-15T12:00:00Z') AS cutoff
MATCH (m:Message)
WHERE m.created_at >= cutoff
RETURN m

De patrón

FunciónDescripción
exists(pattern)True si existe al menos un binding del patrón.
nodes(path)Nodos a lo largo de un PATH (posiciones alternadas 0, 2, 4, …).
relationships(path)Relaciones a lo largo de un PATH (posiciones 1, 3, 5, …).

Las subqueries EXISTS { ... } están documentadas en Leer datos.

Constructores de path

shortestPath((a)-[*..N]-(b)) y allShortestPaths((a)-[*..N]-(b)) (RFC-023, [Unreleased]). El path binding es obligatorio y ambos endpoints deben estar bindeados en el scope. Un solo hop de relación en el patrón interno.

MATCH p = shortestPath((a:Person {name: 'Alice'})-[:KNOWS*..6]-(b:Person {name: 'Bob'}))
RETURN p, length(p) AS hops

vector() (desde 0.4.1)

Levanta una lista numérica homogénea (literal o parámetro) a un VECTOR(Vec<f32>) de primera clase. Los enteros se coercionan a f32. Argumentos no numéricos o no-lista lanzan un EvalError tipado que nombra el índice ofensor.

CREATE (d:Doc {id: $id, embedding: vector($values)})

Los literales de lista pelados (e.g. embedding: [0.1, 0.2]) todavía fallan con only scalars are storable in v0; vector() es el opt-in explícito para almacenamiento.

Siguientes pasos