有关Neo4j中节点ID字符串的假设 - cypher

时间:2014-03-11 21:24:51

标签: neo4j cypher

在我最近的问题Modeling conditional relationships in neo4j v.2 (cypher)中,答案让我想到了另一个关于我的数据模型和用于表示它的cypher语法的问题。让我们说在我的模型中,有一个节点CLT1就是我所谓的Source节点。 CLT1与其他286个Target节点有关系。这是目标节点的模型:

CREATE    
(Abnormally_high:Label1:Label2:Label3:Label4:Label5:Label6:Label7:Label8:Label9:Label10 
{Pro1:'x',Prop2:'y',Prop3:'z'})

关键点:我假设CREATE子句之后的字符串是

  • 此目标节点的ID

  • ID非常重要,因为其内容具有特定于域的含义 并且是可查询的。

  • 在这种情况下是短语...." Abnormally_high"。

我根据电影数据库示例做了这个假设。

CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})

CREATE之后的第一个字符串肯定具有特定于域的含义!

在我之前的文章中,我讨论了问题2.我发现问题2的出现是因为在286个目标节点中,有许多实例中至少有一个目标节点共享相同的ID。在这种情况下,ID是" Abnormally_high"。其他Target节点可能在Label1 - Label10或相关属性中的任何值上有所不同。

显然,Cypher并不喜欢这样。在问题2中,我正在讨论如何处理cypher不喜欢多次使用相同节点ID的事实,即使标签或属性不同。

我的问题是我对目标节点ID的假设。

我是对的吗?

我现在想我可以改用它......

CREATE (CLT1_target_1:Label1:Label2:Label3:Label4:Label5:Label6:Label7:Label8:Label9:Label10  
{name:'Abnormally_high',Prop2:'y',Prop3:'z'})

如果CREATE子句之后的第一个字符串确实是一个ID,那么我所要做的就是放置一个唯一的目标节点标识符....就像CLT1_target_1一样,并递增到CLT1_target_286。如果我这样做,那么我可以将名称作为属性并更改我想要的任何标签或属性。

我有这个吗?

1 个答案:

答案 0 :(得分:0)

你错了。在Cypher中,节点名称(例如" Abnormally_high")只是在查询生命周期中存在的变量名称(有时甚至不长)。 Cypher查询中使用的节点名称永远不会以任何方式持久存在,并且可以是任意字符串。

此外,在neo4j中,术语" ID"具有特定的含义。 neo4j DB将自动为每个新节点分配一个(当前)唯一的整数ID。您无法控制分配给节点的ID值。删除节点后,neo4j可以将其ID重新分配给新节点。

您应该阅读neo4j手册(可从docs.neo4j.org获取),特别是有关Cypher的部分,以便更好地理解。