Queries de lectura
Esta página recorre el lado de lectura de Cypher en NamiDB, con ejemplos que corren todos en el motor actual.
MATCH
MATCH (p:Person) RETURN p.name LIMIT 10MATCH (n) sin label se expande a cada label observada en el namespace
(memtable + SSTs persistidos + schema declarado).
MATCH (n) RETURN labels(n), count(*) AS nPattern matching
MATCH (a:Person {name: $name})-[:KNOWS]->(b:Person)RETURN b.name AS friendLos predicados sobre propiedades dentro del pattern entre llaves se empujan hacia abajo al scan de SST y se usan para pruning con bloom-filter / fence-pointer.
Paths de longitud variable
MATCH (a:Person {_id: $start})-[:KNOWS*1..3]->(b)RETURN DISTINCT b.name AS friend_of_friendLos límites de profundidad (1..3) son obligatorios — el * sin
acotar está fuera de scope.
Filtros
MATCH (p:Person)WHERE p.age >= $min AND p.country IN ['EC', 'SV']RETURN p.name AS name, p.age AS ageORDER BY p.age DESCLIMIT 100Los predicados se empujan a través de los joins (RFC-011) y a través del pruning de row-group de Parquet (RFC-013).
Optional match
MATCH (p:Person {_id: $id})OPTIONAL MATCH (p)-[:OWNS]->(c:Car)RETURN p.name AS name, collect(c.model) AS carsc.model va a ser null/vacío si no existe un edge OWNS.
Subqueries de existencia
MATCH (p:Person)WHERE EXISTS { MATCH (p)-[:WORKS_AT]->(:Company {country: $country})}RETURN p.nameEXISTS { ... } se decorrela en un hash semi-join
(RFC-014) — sin loop anidado.
Agregaciones
MATCH (p:Person)-[:KNOWS]->(b)RETURN p.country AS country, count(DISTINCT b) AS reachORDER BY reach DESCLIMIT 20La agregación vectorizada corre morsel-at-a-time; el group-by usa un hash-aggregator.
EXPLAIN
EXPLAIN VERBOSEMATCH (a:Person)-[:KNOWS]->(b) RETURN b ORDER BY b.id LIMIT 20imprime el plan lógico elegido con anotaciones de selectividad y costo, más el árbol de operadores físicos.
namidb explain --verbose "MATCH (a:Person)-[:KNOWS]->(b) RETURN b LIMIT 5"