关于stackoverflow的第一个问题-是的。
如果图片不存在,下面的查询应该创建一个图片。将url
(清晰地描述图片)、title
和tags
(数组)作为参数传递。每个图片都有一些标记,用节点表示。它工作,但不是很快。
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行)将在任何情况下执行-不是fine。
是否有办法在一次查询中解决这个问题?我希望第4-7行只执行on create
(第2行),因为在执行时间上有很大的差异。
括号不能用
我使用MERGE
而不是CREATE UNIQUE
,因为我需要ON CREATE
…和MERGE
似乎更快。
我也将感谢任何进一步的优化
jkoschwitz,
可以使用临时属性和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
恩典与平安,
吉姆 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