我在 stackoverflow 上的第一个问题 - 是的。
\n\n如果图片尚不存在,则以下查询应创建图片。url(清楚地描述了图片)title和tags(数组)作为参数传递。每张图片都有一些标签,用节点表示。它有效,但速度不快。
MERGE (pic:Picture {url:{url}})\nON CREATE\n SET pic.title = {title}, pic.created = timestamp()\n FOREACH (tagname IN {tags} |\n MERGE (t:Tag {name:tagname})\n MERGE (pic)-[:tag]->(t)\n )\nRun Code Online (Sandbox Code Playgroud)\n\nset(第 3 行)只有在新创建图片时才会执行 - 很好。
foreach(第 4 行)在每种情况下都会被执行 - 不好。
有什么办法可以在一次查询中解决这个问题吗?我希望只执行第 4-7 行on create(第 2 行),因为执行时间存在巨大差异。
括号不起作用。
\n\n我使用MERGE而不是CREATE UNIQUE因为我需要ON CREATE\xe2\x80\xa6 并且MERGE似乎更快。
我也将感谢任何进一步的优化。
\n伊科施维茨,
您可以使用临时属性和 WHERE 子句来执行此操作。您还可以使用 UNWIND 子句使其变得更好一些。
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
Run Code Online (Sandbox Code Playgroud)
恩典与平安,
吉姆