Cypher的目标是让每个Node和她在链接属性上使用相同的sulotionId达到第二级连接,我想要返回的节点有几种类型,TypeA / TypeB都是NodeType的子节点。 / p>
我的Cypher看起来像这样:
var graphResult = graphClient.Cypher
.Unwind(Nodes, "singleNode")
.Match("p = (innerNode:Intell{Id:singleNode.Id}) -
[r:CONTAINS*1..2{solutionId:{innerSolutionId}}] - ()")
.WithParam("innerSolutionId", solutionId)
.Return(p => new
{
Nodes =
Neo4jClient.Cypher.Return.As<IEnumerable<Neo4JNodeDSO>>("nodes(p)"),
Relationships = Neo4jClient.Cypher.Return.As<IEnumerable<Neo4JLinkDSO>>("rels(p)")
}).Results;
但问题是,如果有2个节点与中间节点连接并且它们在我展开的组内,它会显示路径2次(从每侧开始1)以防止这种情况的任何方法? 例: A-> B-> C而A和C在节点的grop中返回: A-> B-> C路径和C-> B-> A路径
非常感谢先进。
答案 0 :(得分:0)
你有几个选择 - 首先是指导你的关系 - 所以:
p = (innerNode:Intell)-[r:CONTAINS]->()
这会有所帮助,但你仍然可以获得重复。
Shortest Path可能是你最好的选择,因为它会返回一个而不是倍数。如下所示:
var graphResult = graphClient.Cypher
.Unwind(Nodes, "singleNode")
.Match("p = shortestPath( (innerNode:Intell{Id:singleNode.Id})-[r:CONTAINS*1..2{solutionId:{innerSolutionId}}]-() )")
.WithParam("innerSolutionId", solutionId)
.Return(p => new {
Nodes = Neo4jClient.Cypher.Return.As<IEnumerable<Neo4JNodeDSO>>("nodes(p)"),
Relationships = Neo4jClient.Cypher.Return.As<IEnumerable<Neo4JLinkDSO>>("rels(p)")
})
.Results;