neo4j - 如何快照标签中的所有内容

时间:2014-09-30 18:07:16

标签: neo4j

我使用 neo4j 来存储有关地图和传感器的信息。每次地图或传感器布局发生变化时,我都需要保留副本。我可以想象查询和手动创建所述副本,但我想知道是否可以构建一个neo4j类型的查询来为我做这个。

到目前为止,我所提出的是一种复制给定标签中节点的方法:

match ( a:some_label { some_params }) with a create ( b:some_label ) set b=a,b.other_id=value;

这将允许我在给定的快照上放置版本时间戳信息。

它没有做的是复制边缘信息。建议?也许是第二个(类似的)查询?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您实际上是在尝试维护节点状态的历史记录及其传入关系的状态。一种方法是按逆时间顺序链接节点。

例如,假设链中的节点标记为Some_label,并且关系的类型为SOME_TYPE。链的头节点始终是当前(最近的)节点。除非Some_label节点在时间上是链中最早的节点,否则它将与节点的先前版本具有SOME_TYPE的关系。

以下是如何在链的头部插入新关系和节点(带有一些属性)。 (只是为了设置这个例子,我假设链中的第一个节点被标记为HeadRef的某个节点链接。)

MATCH (x:HeadRef)-[r1:SOME_TYPE]->(a1:Some_label)
CREATE (x)-[r2:SOME_TYPE {x: "ghi"}]->(a2:Some_label {a:123, b: true})-[r:SOME_TYPE]->(a1)
SET r=r1
WITH r1
DELETE r1

请注意,与维护自己的other_id属性以将节点链接在一起相比,此方法的性能更高。您应该始终使用关系 - 这是图表数据库方式。