在我最近的问题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。如果我这样做,那么我可以将名称作为属性并更改我想要的任何标签或属性。
我有这个吗?
答案 0 :(得分:0)
你错了。在Cypher中,节点名称(例如" Abnormally_high")只是在查询生命周期中存在的变量名称(有时甚至不长)。 Cypher查询中使用的节点名称永远不会以任何方式持久存在,并且可以是任意字符串。
此外,在neo4j中,术语" ID"具有特定的含义。 neo4j DB将自动为每个新节点分配一个(当前)唯一的整数ID。您无法控制分配给节点的ID值。删除节点后,neo4j可以将其ID重新分配给新节点。
您应该阅读neo4j手册(可从docs.neo4j.org获取),特别是有关Cypher的部分,以便更好地理解。