我有一组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}}
我希望这是明确的解释。提前谢谢。
答案 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 *
对于无尾头和日期时间大于最后尾部的孤儿(即不在两个现有尾部之间),只需要扩展案例。