【问题标题】:Neo4j: Cypher query returns wrong json resultNeo4j:Cypher 查询返回错误的 json 结果
【发布时间】:2019-03-15 19:03:09
【问题描述】:

我的密码查询有问题。

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

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

但是我们收到这个 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

任何帮助将不胜感激!

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案1】:

    您的结果似乎与您所说的一致,只是它是树形(您要求的)。

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

    试试这个,而不是(还要注意可变长度路径模式深度的2 的上限):

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

    除此之外:只有一个节点标签 NodenodeType 属性指定节点的确切“类型”通常不是建模事物的正确方法。它使理解数据库变得更加困难,使您的代码变得复杂,并使利用索引变得更加困难。您可能希望有单独的标签(例如,PersonEvent)。您可能还希望拥有不同的关系类型。

    【讨论】:

    • 是的,neo4j浏览器中的结果是正确的,但是json输出不正确。 json 输出应从包含查询中提供的 id 的节点开始。然后它应该有 connected_with 节点,并且它们还应该包含它们连接到的事件。我应该像你说的那样使用两个不同的节点实体来让事情变得更容易!感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多