当我调用格式为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
条目包含startNode
和endNode
,则可以安全地确定,从一个条目到另一个条目之间存在直接链接,以及出现在其中的任何其他节点该行的nodes
部分可以忽略吗?
在某处,我可以找到有关如何计算graph
输出的完整说明吗?
答案 0 :(得分:1)
因为您输入了错字,所以n
中根本没有提及optional match
。
另外你应该使用标签!
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
RETURN DISTINCT n, r