将neo4j查询结果转换为nodejs中类似节点和链接的graphjson

vdzxcuhz  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(192)

我在node-app中使用neo4j-driver来检索neo4j查询结果。我想以graph json(nodes & links)格式得到这个结果,并像这样在d3中填充它:https://www.jsonkeeper.com/b/5ZYS
但我得到的结果是这样的:https://www.jsonkeeper.com/b/FMJ1
我已经尝试了一些解决方案来实现这个目标,但没有人能够完美地实现它。你能指导我如何实现它吗?
以下是node express app中的控制器:

import neo4j from 'neo4j-driver';
import {
  NEO4J_PASSWORD,
  NEO4J_URL,
  NEO4J_USERNAME,
} from '../../constants/index.js';
export const runMatchQuery = async (req, res) => {
  const query = req?.body?.query;
  if (query?.toLowerCase()?.includes('match')) {
    const driver = neo4j.driver(
      NEO4J_URL,
      neo4j.auth.basic(NEO4J_USERNAME, NEO4J_PASSWORD)
    );
    const session = driver.session();

    try {
      const result = await session.run(query);
      return res.status(200).json(result);
    } catch (error) {
      console.log(error);
      return res.status(500).json({ message: error.message });
    } finally {
      await session.close();
      await driver.close();
    }
  } else {
    return res.send(405).json({ message: 'Query not permitted.' });
  }
};
a14dhokn

a14dhokn1#

您可以流式传输JSON以输出节点和关系的列表。
它的格式与您的格式不同,但它与列表中的节点和另一个列表中的关系非常接近。

MATCH (n:MyNode)-[r:MY_REL]-()
WITH COLLECT(n) as mynodes, COLLECT(r) as myrels
CALL apoc.export.json.data(mynodes, myrels, null, {stream:True, jsonFormat: "JSON", writeNodeProperties:False})
YIELD data
RETURN data

有关JSON输出选项的更多信息,请访问:https://neo4j.com/labs/apoc/4.1/export/json/

相关问题