<Record> 在不使用 .get() 的情况下检索所有 neo4j 键数据



我使用neo4j-driver来运行我的查询:

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();

当我检索结果时,我现在必须通过所有记录检索map并检索所有值,以便格式化_fields属性中的数据。是否有一种方法可以在DB查询中做到这一点,或者不使用单独的.get调用。我很担心性能,因为节点的数量会很大,通过它们映射可能会消耗不必要的资源。

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;
};

您可以尝试在查询中使用地图投影,如下所示:

MATCH (c:Color)-[a:ASSOCIATED_WITH]->(t:Tag) WITH COLLECT(t.name) AS tags, c RETURN c{.alternativeNames, .hex, .name, .temperature, tags: tags}

这是文档的链接。

相关内容