【发布时间】:2022-01-04 22:09:39
【问题描述】:
在下面的代码 sn-p 中,如果 MERGE = ON MATCH,我只想执行 1 个 SET 命令,如果 MERGE = ON CREATE,则执行剩余的代码(SET、UNWIND、MATCH、MERGE)。
但是,当我在 ON MATCH 过程中对查询进行 PROFILE 时,我可以看到数据库被最后 4 行、UNWIND、MATCH 和 MERGE 命令击中。如果我将它们注释掉,那么 db hits 会从 6 减少到 2。
有什么办法可以确保最后 4 行只在 ON CREATE 过程中运行,而不是在 ON MATCH 过程中运行?我尝试过一些愚蠢的事情,比如将 ON CREATE 下面的所有内容都用括号括起来,或者在两者之间用逗号等:-)
尝试像这样优化的原因是我有 150k+ json 对象,并且我试图尽可能加快加载过程。我也需要
谢谢!
PROFILE
CALL apoc.load.json('file:///20220103.json')
//I will be iterating through 150k+ JSON objects here
YIELD value
WHERE value.skills <> []
MERGE (j:Role {roleId: value.roleId})
ON MATCH
SET j.keep=true
ON CREATE
SET j.title =replace(value.title,'&','&'), j.createdDate = datetime(), ...... etc
WITH value,j
UNWIND value.skills AS list
MATCH (s:Skill {name: toLower(list.skillname) })
MERGE (j)-[:HAS_SKILL{value:list.rank}]->(s)
【问题讨论】: