使用constants.DATA_GRAPH了解Cypher查询的输出

时间:2015-09-17 14:38:54

标签: graph neo4j cypher

当我调用格式为results = gdb.query(query, data_contents=constants.DATA_GRAPH)的Neo4j REST API时,我会收到更多结果,结果比我预期的要复杂得多。

Cypher版本:CYPHER 2.2

例如,在具有这种节点排列的图表中......

(Bob) --> (Amy) --> (Cal)

...和查询...

MATCH (n)
OPTIONAL MATCH (a)-[r]-(b)
RETURN DISTINCT n, r

...返回的结果之一如下:

{ "relationships": [
    { "id":"270"
    , "type":"LIKES"
    , "startNode":"134"
    , "endNode":"136"
    , "properties":{}
    }
  ]
, "nodes": [
    { "id":"134"
    , "labels":["Person"]
    , "properties":{"name":"Amy"}
    }
  , { "id":"135"
    , "labels":["Person"]
    , "properties":{"name":"Bob"}
    }
  , { "id":"136"
    , "labels":["Person"]
    , "properties":{"name":"Cal"}
    }
  ]
}

如果我理解正确,这表明Amy(134)和Cal(136)之间存在直接关系。据我所知,鲍勃在艾米和卡尔之间的路上没有位置。那么为什么Bob出现在这个条目中呢?

我也得到重复的条目。例如,此条目出现两次:

{ "relationships": [
    { "id":"264"
    , "type":"LIKES"
    , "startNode": "134"
    , "endNode":"136"
    ,"properties":{}
    }
  ]
, "nodes": [
    { "id":"134"
    , "labels":["Person"]
    , "properties":{"name":"Amy"}
    }
  , { "id":"136"
    , "labels":["Person"]
    , "properties":{"name":"Cal"}
    }
  ]
}

在我的测试中,我看到有2个或3个节点的行。是否有可能在一行中看到更多节点?如果relationship条目包含startNodeendNode,则可以安全地确定,从一个条目到另一个条目之间存在直接链接,以及出现在其中的任何其他节点该行的nodes部分可以忽略吗?

在某处,我可以找到有关如何计算graph输出的完整说明吗?

1 个答案:

答案 0 :(得分:1)

因为您输入了错字,所以n中根本没有提及optional match

另外你应该使用标签!

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
RETURN DISTINCT n, r