Estoy usando neo4j-driver para ejecutar mi consulta:
import neo4j from "neo4j-driver"; const driver = neo4j.driver( process.env.NEO4J_URI, neo4j.auth.basic(process.env.NEO4J_USER, process.env.NEO4J_PASS) ); export const session = driver.session();
Cuando recupero los resultados, ahora tengo que map
todos los registros y recuperar todos los valores para formatear los datos que de otro modo están en la propiedad _fields
. ¿Hay alguna manera de hacer esto dentro de la consulta DB, o sin usar llamadas .get
separadas? Me preocupa el rendimiento, ya que la cantidad de nodos será grande y el mapeo a través de ellos podría quemar recursos innecesarios.
export const getColorsList = async (): Promise<Color[]> => { const readQuery = ` MATCH (c:Color)-[a:ASSOCIATED_WITH]->(t:Tag) WITH COLLECT(t.name) AS tags, c RETURN c.alternativeNames AS alternativeNames, c.hex AS hex, c.name AS name, c.temperature AS temperature, tags AS tags `; const readResult = await session.readTransaction((tx) => tx.run(readQuery)); const colors: Color[] = readResult.records.map((color) => { const alternativeNames = color.get("alternativeNames"); const hex = color.get("hex"); const name = color.get("name"); const temperature = color.get("temperature"); const tags = color.get("tags"); return { alternativeNames, hex, name, temperature, tags, }; }); return colors; };
Puede intentar usar una proyección de mapa en su consulta, algo como esto:
MATCH (c:Color)-[a:ASSOCIATED_WITH]->(t:Tag) WITH COLLECT(t.name) AS tags, c RETURN c{.alternativeNames, .hex, .name, .temperature, tags: tags}
Aquí está el enlace a la documentación .