gpt4 book ai didi

neo4j - Cypher:模式的哪些部分可以绑定(bind)到变量?

转载 作者:行者123 更新时间:2023-12-01 10:45:42 25 4
gpt4 key购买 nike

我可以像这样获取所有 User 节点:

MATCH (n:User)
RETURN n

在这种情况下,n 绑定(bind)到节点。但是假设我想编写一个 Cypher 查询,它获取每个节点的 name 属性,标签为 User ,属性的键为 name ,并将其作为 username 返回。我写:

MATCH (n:User { name: username })
RETURN username

但这似乎是不可能的:Cypher 解析器不接受模式该位置的标识符 username。还有另一种方法吗?模式的哪些位置可以放置标识符?只是节点和关系?

(是的,我知道我可以绑定(bind)到节点,检查 name 属性是否存在,如果存在则提取该值。但是直接在属性(property)。)

最佳答案

回答标题中提出的问题:

具体来说,在 MATCH 子句中,路径、节点和关系可以绑定(bind)到标识符:

MATCH p = (n)-[r]-(m)

MATCH 子句之后,结合 WITH 子句,任何东西都可以绑定(bind)到一个标识符:

MATCH p = (n)-[r]-(m)
WITH n.name AS identifier

MATCH p = (n)-[r]-(m)
WITH COUNT(r) AS some_identifier

MATCH p = (n)-[r]-(m)
WITH EXTRACT(x IN NODES(p) | x.name) AS another_identifier

等等

如果要将路径、节点或关系之外的任何内容绑定(bind)到标识符,请使用 WITH。您的具体示例似乎展示了对 MATCH 子句中花括号的作用的误解。它们用于我喜欢称之为“速记 WHERE 条件”的东西。大括号允许您在 MATCH 子句中以节点和关系属性为条件,而不是在后续的 WHERE 子句中条件化。

MATCH (n:User {name:"Alice"})
RETURN n

MATCH (n:User)
WHERE n.name = "Alice"
RETURN n

是一样的。这是一个方便/偏好的问题。

TL;DR - 不,您不能将 name 属性绑定(bind)到 MATCH 子句中的标识符 username。使用 WITH n.name AS username 来执行此操作。

关于neo4j - Cypher:模式的哪些部分可以绑定(bind)到变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26428951/

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