首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cypher:在“`merge…”中使用“`foreach`”关于创作者的

cypher:在“`merge…”中使用“`foreach`”关于创作者的
EN

Stack Overflow用户
提问于 2014-08-11 19:26:38
回答 2查看 903关注 0票数 1

我关于堆叠溢出的第一个问题-是的。

如果还没有,下面的查询应该创建一个图片。url(清晰地描述图片)、titletags(数组)作为参数传递。每幅图片都有一些标记,由节点表示。它起作用了,但不快。

代码语言:javascript
运行
复制
MERGE (pic:Picture {url:{url}})
ON CREATE
  SET pic.title = {title}, pic.created = timestamp()
  FOREACH (tagname IN {tags} |
    MERGE (t:Tag {name:tagname})
    MERGE (pic)-[:tag]->(t)
  )

set (第3行)只有在创建了新的精细图片时才会执行。

foreach (第4行)将在每一种情况下执行--不是很好。

有办法在一个查询中解决这个问题吗?我希望第4-7行只执行on create (第2行),因为执行时间有很大的差异。

托架不起作用。

我使用MERGE而不是CREATE UNIQUE,因为我需要ON CREATE…而MERGE似乎更快。

我也将感谢任何进一步的优化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-11 21:48:56

jkoschwitz,

可以使用临时属性和WHERE子句来完成此操作。您也可以使用UNWIND子句使其更好一些。

代码语言:javascript
运行
复制
MERGE (pic:Picture {url:{url}})
ON CREATE
SET pic.title = {title}, pic.created = timestamp(), pic.new = 1
WITH pic
WHERE pic.new = 1
UNWIND {tags} as tagname
MERGE (t:Tag {name : tagname})
MERGE (pic)-[:tag]->(t)
REMOVE pic.new

恩惠与和平

吉姆

票数 5
EN

Stack Overflow用户

发布于 2020-05-01 09:16:01

代码语言:javascript
运行
复制
    MERGE (pic:Picture {url:{url}})
    ON CREATE
        SET pic.title = {title}, pic.created = timestamp(), pic.new = 1
        FOREACH (tagname IN CASE WHEN pic.new = 1 THEN {tags} ELSE [] END |
            MERGE (t:Tag {name:tagname})
            MERGE (pic)-[:tag]->(t)
        )
        REMOVE pic.new
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25250861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档