Neo4j 在节点上添加临时属性
是否可以在节点上设置一个属性,并在一个cypher查询中删除它,而不会在Neo4j中导致实际的磁盘写入 例如,我尝试在这个查询中使用n作为差事复制n节点,但是一个SET on errad会导致一个SET on n,同样,REMOVE这样的属性在返回值中丢失 这是我在节点上创建瞬态属性的一种尝试Neo4j 在节点上添加临时属性,neo4j,cypher,spring-data-neo4j,Neo4j,Cypher,Spring Data Neo4j,是否可以在节点上设置一个属性,并在一个cypher查询中删除它,而不会在Neo4j中导致实际的磁盘写入 例如,我尝试在这个查询中使用n作为差事复制n节点,但是一个SET on errad会导致一个SET on n,同样,REMOVE这样的属性在返回值中丢失 这是我在节点上创建瞬态属性的一种尝试 String q = "MATCH (owner)-[:POSTED]->n WITH owner, n, n as errand, CASE WHEN owner-[:RECOMME
String q = "MATCH (owner)-[:POSTED]->n WITH owner, n, n as errand,
CASE WHEN owner-[:RECOMMENDED]->n THEN 'BROADCASTED'
WHEN owner-[:POSTED]->n THEN 'POSTED'
WHEN owner-[:GOT_NOMINATED]->n THEN 'NOMINATED'
ELSE 'CONNECTED'
END AS relationship
SET errand.meta = relationship
REMOVE n.meta
RETURN errand LIMIT 1";
但是,当我检查我的域对象以查看属性是否由Neo4j设置时,它返回null
public class Errand {
private String meta;
Boolean isMetaSet () {
return meta != null;
}
}
使用SDN Neo4j,我得到了我的差事对象
Errand single = template.query(q, null).to(Errand.class).singleOrNull();
System.out.println (single.isMetaSet());
返回false
答案是什么
是否适用于节点
我目前正在嵌入式模式下使用Neo4j和Neo4j,我的查询是使用Neo4jTemplate类运行的
请参见我在上对类似问题的回答。您的查询根本不需要临时节点属性或特殊变量。(此外,正如@frobberoffits所说,你的方法是有缺陷的。) 以下查询消除了差事(这只是
n
节点的别名),还设置了n.meta
属性:
MATCH (owner)-[:POSTED]->n
SET n.meta =
CASE WHEN owner-[:RECOMMENDED]->n THEN 'BROADCASTED'
WHEN owner-[:POSTED]->n THEN 'POSTED'
WHEN owner-[:GOT_NOMINATED]->n THEN 'NOMINATED'
ELSE 'CONNECTED'
END
RETURN n.meta LIMIT 1
(由于您限制为1,因此无需使用
DISTINCT
)我希望在尝试返回属性时,将可反序列化的单个节点返回到我的模型对象中。这会导致空指针异常,因为它在返回之前已被删除。我的cypher查询有问题吗?重新措辞我的问题请更新问题,以显示基于该查询填充差事对象的代码。您是否尝试过在WITH块中不绑定n
两次,一次绑定到自身,一次绑定到差事
?您的回答似乎偏离了问题。你能看看我们如何在Neo4j中的节点上设置临时属性吗?这与在Neo4j中创建任意变量完全不同,@FrobberOfBits回答了这个问题。问题的主题是关于临时节点属性,而不是变量——它们是完全不同的东西。此外,问题的第一个链接指向一个问题,该问题的公认答案与节点属性有关。最后,问题中提供的查询实际上不需要做任何事情来返回单个关系值,因此我提供了一个更直接的查询。你是说你的整个问题实际上是在问如何设置meta
属性吗?我已经修改了我的答案来实现这一点。一个节点n在数据库中有三个持久化的属性。您想向节点添加第四个临时属性元,该属性元仅在返回的节点中可见,而在数据库中不可见。我们如何操作?