我想找到所有节点序列,它们的名称出现在列表中,并且两者之间的关系中存在相同的序列ID。例如:基于从以下查询中构造的图:
MERGE (a:Person { name: 'graph'})
MERGE (b:Person { name: 'server' })
MERGE (a)-[:NEXT{seqid:1}]->(b)
MERGE (c:Person { name: 'server' })
MERGE (d:Person { name: 'db'})
MERGE (c)-[:NEXT{seqid:1}]->(d)
MERGE (a1:Person { name: 'graph'})
MERGE (b:Person { name: 'db' })
MERGE (a)-[:NEXT{seqid:2}]->(b)
MERGE (c:Person { name: 'db' })
MERGE (d:Person { name: 'server'})
MERGE (c)-[:NEXT{seqid:2}]->(d)
在给定列表中找到所有具有其名称的节点序列,例如,在它们之间的关系中存在具有相同'seqid'属性的['graph','server','db']。
IE
(graph)->(server)-(db) with same seqid :1
(graph)->(db)->(server) with same seqid :1 //there can be another matching
sequence with same seqid
(graph)->(db)->(server) with same seqid :2
有没有办法让每个节点只保留最后一个节点序列说'(graph)->(server)->(db)',而不是像(graph)->(server)这样的大序列的每个子路径或(服务器)->(db)
请帮助我解决这个问题......
(我正在通过嵌入式模式下的java api使用neo4j 2.3.6社区版。)
// Get all the possible paths
MATCH path = (S:Person)-[rels:NEXT*]->(E:Person)
// Check that the property is the same
WHERE ALL( r in rels WHERE rels[0]['seqid'] = r.seqid )
RETURN rels[0]['seqid'] as seqid,
// Get an array of names
REDUCE(acc = [], n in nodes(path) | acc + [n.name])
ORDER BY seqid,
length(path)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句