id为的Neo4j merge语句

id为的Neo4j merge语句,merge,neo4j,cypher,Merge,Neo4j,Cypher,我想做一个合并语句。我正在尝试使用他的节点id获取节点,问题是合并不允许我使用“where-idnode=nodeId” 比如: merge( user:User) where id(user)=111 on create set user = {facebookId:"13",name:"",gender:"",pushId:"", picoAccessToken:"", accessTokenExpires:""} on match set user += {facebookId

我想做一个合并语句。我正在尝试使用他的节点id获取节点,问题是合并不允许我使用“where-idnode=nodeId”

比如:

merge( user:User) where id(user)=111 
on create set user = 
{facebookId:"13",name:"",gender:"",pushId:"", picoAccessToken:"",
   accessTokenExpires:""}
on match set user += 
{facebookId:"13",name:"",gender:"",pushId:"",picoAccessToken:"",
    accessTokenExpires:""}
return user
一般问题,我应该使用节点id来检索节点吗?或者我应该向节点添加一个id属性。

您不能将id函数与MERGE一起使用,因为它的行为类似于MATCH或CREATE,并且您不能手动将内部id分配给节点

另一方面,是的!最好在将分配给节点的应用程序级别使用id生成,或者使用GraphAware UUID插件来为您生成id

依赖节点内部ID被认为是不好的做法,因为已删除节点的ID会在数据库生命周期中重复使用。

不能将ID函数与MERGE一起使用,因为它的行为类似于MATCH或CREATE,并且不能手动将内部ID分配给节点

另一方面,是的!最好在将分配给节点的应用程序级别使用id生成,或者使用GraphAware UUID插件来为您生成id


依赖节点内部ID被认为是不好的做法,因为已删除节点的ID在数据库生命周期中被重用。

Neo Technology的Michael Hunger已经回答了这个问题

底线是不应使用节点id,而应将其视为实现细节

因此,推荐的方法是使用您自己的id属性*。这可以是UUID、某种计数器或任何适合您的项目的id


我个人喜欢UUID方法。它们很容易从任何语言生成,例如Java中的UUID类。这些都是独一无二的,很明显,它们是由新技术产生的。

新技术的迈克尔·霍恩已经回答了这个问题

底线是不应使用节点id,而应将其视为实现细节

因此,推荐的方法是使用您自己的id属性*。这可以是UUID、某种计数器或任何适合您的项目的id


我个人喜欢UUID方法。它们很容易从任何语言生成,例如Java中的UUID类。是唯一的,并且很明显生成了。

您不应该使用内部id。添加您自己的id属性。您不应该使用内部id。添加您自己的id属性。