Neo4j:Cypher查询返回错误的json结果

时间:2019-03-15 19:03:10

标签: neo4j cypher neo4j-apoc

我的密码查询有问题。

情况说明: 用户可以连接到其他CONTACT节点,但他也可以连接到EVENT节点。其他用户也可以连接到这些事件节点。我们希望检索连接到的节点(CONTACT&EVENT),但我们还需要检索连接到的CONTACT节点的事件节点。

这是我们从底部中心的CONTACT节点检索连接的节点时想要看到的图形:

neo4j graph

但是我们收到以下json输出:

{
  "_type": "Node",
  "_id": 1,
  "nodeType": "EVENT",
  "nodeId": 1,
  "connected_with": [
    {
      "_type": "Node",
      "_id": 0,
      "nodeType": "CONTACT",
      "nodeId": 1
    },
    {
      "_type": "Node",
      "_id": 2,
      "nodeType": "CONTACT",
      "nodeId": 2,
      "connected_with": [
        {
          "_type": "Node",
          "_id": 0,
          "nodeType": "CONTACT",
          "nodeId": 1
        }
      ]
    }
  ]
}

我们想深入2个级别,这意味着我们希望看到 我们连接到的联系人,但同时也联系我们 “碰到”事件,因此我们要深入2个级别的原因。

我们目前正在运行此密码查询,但是如前所述,它不起作用。

MATCH path = (n:Node {nodeId: 1})<-[:CONNECTED_WITH*]-(nodes)
WITH collect(path) as paths
CALL apoc.convert.toTree(paths) yield value as json
RETURN json

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您的结果似乎与您想要的内容相符,只是它是树状(您要求的形式)。

您声明您没有“看到”您的期望(大概是在neo4j浏览器中)。这是因为您要求的结果不是简单的节点,关系和/或路径。

相反,请尝试执行此操作(还请注意2的可变长度路径模式深度的上限):

MATCH path = (n:Node {nodeId: 1})<-[:CONNECTED_WITH*..2]-(nodes)
RETURN path

在旁边:仅具有单个节点标签Node并具有nodeType属性,该属性指定节点的确切“类型”通常不是对事物建模的正确方法。它使理解数据库变得更加困难,趋于使您的代码复杂化,并且使利用索引的难度变得更大。您可能希望有单独的标签(例如PersonEvent)。您可能还希望具有不同的关系类型。