如何创建链接到节点的有序链?

时间:2014-12-11 18:23:08

标签: neo4j cypher

我有一组HeadNodes,其中包含字段ID,我有一组TailNodes,这些HeadNodes彼此之间以及id并且字段date不相关和milliseconds中的Match (p: TailNodes) where not (p)-[:RELATED_TO]->()

我想写一下查询:

HeadNode

未直接或通过其他TailNodes加入HeadNodes

获取其ID号,并查看此{id} HeadNode{id: 1}。当我找到它(它保证在那里)时,我找了一个放置它的地方(按日期时间顺序)。

例如:

我们有1 TailNodes: {id: 1, datetime: 111}和3 {id: 1, datetime: 115}{id: 1, datetime: 113}TailNode {id: 1, datetime: 111}没有任何关系。

首先,它需要先(head:HeadNode{id: 1})<-[:RELATED_TO]-(tail:TainNodes{id:1, datetime:111})并创建一个关系:
Tailnode

第二步它需要第二个115并发现111大于(head:HeadNode{id: 1})<-[:RELATED_TO]-(tail1:TainNodes{id:1, datetime:115})<-[:RELATED_TO]-(tail2:TainNodes{id:1, datetime:111}) ,因此它会删除先前的关系并创建2个新关系,并且链接看起来像这样:

113

第三步,它发现111大于115但小于datetime:115 and datetime:111并删除(head:HeadNode{id: 1})<-[:RELATED_TO]-(tail1:TainNodes{id:1, datetime:115})<-[:RELATED_TO]-(tail2:TainNodes{id:1, datetime:113})<-[:RELATED_TO]-(tail3:TainNodes{id:1, datetime:111}) 之间的关系;然后创建两个新关系,最终获得以下内容:

{{1}}

我希望这是明确的解释。提前谢谢。

1 个答案:

答案 0 :(得分:2)

好的,首先减少......没时间创建一个更强大的例子,但稍后再拍一遍。

我开始讨论列表中已有节点的案例

H<--(T {dt:112})<--(T {dt:114})

我意识到我按升序创建了这些,而不是降序。

// match the orphaned tail nodes floating around
match (p:Tail)
where not(p-->())
with p  
// match the strand with the same name and the tail nodes that are connected
// where one datetime (dt) is greater and one is less than my orphaned tail nodes
match (t1:Tail)<-[r:RELATED_TO]-(t2:Tail)
where t1.name = p.name
  and t2.name = p.name
  and t1.dt < p.dt
  and t2.dt > p.dt
// break the relationship between the two nodes i want to insert between
delete r
// create new relationships from the orphan to the two previously connected tails
with t1, t2, p
create p-[:RELATED_TO]->t1
create t2-[:RELATED_TO]->p
return *

对于无尾头和日期时间大于最后尾部的孤儿(即不在两个现有尾部之间),只需要扩展案例。