gpt4 book ai didi

neo4j - Cypher:如何在对象数组上使用 FOREACH 来创建多个节点和多个关系

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

我在处理这个问题标题中描述的获取时遇到了问题。我的尝试是以下字符串:

FOREACH (_tabobj IN {_tabarray} |
MATCH (a:Superlabel),(b)
WHERE a.id = {_parentid} AND b.id = _tabobj.id
MERGE (a)-[r:INCLUDES]->(b {
name : _tabobj.name
})

我试图只创建关系,如果它不在数据库中,如果关系已经在数据库中,则什么都不创建。还尝试只创建 b 节点,如果它不在数据库中,如果 b 节点已经在数据库中则什么都不创建。

非常感谢您提供的帮助

最佳答案

这样的事情怎么样:

MATCH (a:Superlabel {id: {_parentid}})
WITH a, tabarray IN {_tabarray}
UNWIND tabarray AS tabobj
MATCH (b {id: tabobj.id)
MERGE (a)-[r:INCLUDES]->(b {name: tabobj.name})

我通常使用 FOREACH 作为最后的手段 ;)

还有一个更简单的解决方案:

MATCH (a:Superlabel {id: {_parentid}}), (b)
WHERE b.id IN EXTRACT(tabobj IN {_tabarray} | tabobj.id)
MERGE (a)-[r:INCLUDES]->(b {name: tabobj.name})

这两个查询的一个重要考虑因素:当匹配 id 属性上的 b 节点时,数据库索引(如果有的话)将不会被使用,因为索引用于标签/属性对。为 b 指定标签(如果适用)有助于提高性能。

关于neo4j - Cypher:如何在对象数组上使用 FOREACH 来创建多个节点和多个关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33140389/

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