gpt4 book ai didi

neo4j - 在节点 Cypher 上添加临时属性

转载 作者:行者123 更新时间:2023-12-02 03:26:06 27 4
gpt4 key购买 nike

是否可以在单个密码查询中设置节点上的属性并删除它,而不会导致 Neo4j 中的实际磁盘写入。

例如,我尝试使用 n 作为差事复制此查询中的 n 节点,但差事上的 SET 结果为 n 上的 SET,同样,REMOVE 这样的属性在返回值中丢失。

这是我在节点上创建 transient 属性的尝试。

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());

返回错误。

答案在 Neo4J create temp variable within Cypher适用于节点?

我目前在 Neo4j 的嵌入式模式下使用 Neo4j,我的查询是使用 Neo4jTemplate 类运行的。

请参阅我在 Set a transient property on a node neo4j 上就此问题提出的类似问题的回复

最佳答案

您的查询根本不需要临时节点属性或特殊变量。 (此外,正如@FrobberOfBits 所说,您的方法存在缺陷。)

以下查询消除了 errand(它只是 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。)

关于neo4j - 在节点 Cypher 上添加临时属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30223041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com