【问题标题】:Neo4jClient Get nodes by labelNeo4jClient 按标签获取节点
【发布时间】:2017-08-22 05:16:05
【问题描述】:

我知道我们可以使用密码参数进行查询。但是我可以申请我想要返回的节点类型吗?例如,如果有多个节点类型,我想通过将节点标签作为方法参数传递来动态获取相关节点。

例如:

public List<eventA> GetNodesByLabel(string labelName)
{
List<eventA>> list =
                    this.client.Cypher.Match("(event:label)")
                    .Set("label = {labelParam}")
                    .WithParam("labelParam", labelName)
                    .Return(event=> event.As<eventA>())
                    .Results;
return list;
}

我似乎无法让这种方法发挥作用

【问题讨论】:

    标签: neo4j graph-databases neo4jclient


    【解决方案1】:

    您可以使用 APOC 过程apoc.create.addLabels 添加动态标签。

    public List<eventA> GetNodesByLabel(string labelName)
    {
    List<eventA>> list =
        this.client.Cypher.Match("(event:label)")
        .Call("apoc.create.addLabels(event, [{labelParam}])").Yield("node")
        .WithParam("labelParam", labelName)
        .Return(event=> event.As<eventA>())
        .Results;
    return list;
    }
    

    【讨论】:

    • 请问 Yield 命令的作用是什么?它的论点应该是什么,为什么使用“节点”作为它的论点
    • YIELD 实际上是CALL 子句的一部分,表示返回值。 node 标识符实际上是 apoc.create.addLabels 过程签名的一部分,并且必须使用该标识符名称(但可以重命名,例如 YIELD node AS foo)。
    • 它似乎有效,但我返回的结果为 0。有什么建议吗?
    • 我已将其编辑为 this.client.Cypher.Match("(event)") 但这将返回所有节点。我觉得我很接近了,但仍然缺少一些东西
    • 抱歉回复晚了。我试过你的方法,但我似乎无法正确。我使用Query.DebugQueryText 来获取此方法的相应密码文本,这是输出:MATCH (pEvent:label) CALL apoc.create.addLabels(pEvent, ["SomeValidLabel"]) YIELD node RETURN pEvent 但是即使有带有此标签的节点,运行密码也会返回 0 个结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多