我的查询的目的是标记类似的单词。
CREATE CONSTRAINT ON (n:Word) ASSERT n.title IS UNIQUE
MATCH (n) WHERE ID(n)={id}
MERGE (o:Word{title:{title}})
WITH n,o MERGE n-[r:SIMILAR{location:'{location}'}]->o
RETURN ID(o)
n
是一个已存在的单词。我想创建关系&另一个字(o
),如果它们还不存在的话。
这个查询的问题是,它只适用于一个标题,但如果我使用带标题的数组,则单词o
的标题就是整个数组。
你能建议我另一个执行相同操作的查询和/或将多个值传递给title的方法吗。
我正在使用Neography Gem on Rails,例如REST API
要在参数数组中使用单个值,可以使用FOREACH
,类似
MATCH (n)
WHERE ID (n) = {id}
FOREACH (t IN {title} |
MERGE (o:Word {title:t})
MERGE n-[:SIMILAR]->o
)
如果您想将location
也作为参数传递(它实际上是当前查询中的字符串文字),以便对参数数组中的每个title, location
对进行n
的合并操作,您可以尝试
FOREACH (map IN {maps} |
MERGE (o:Word {title:map.title})
MERGE n-[:SIMILAR {location:map.location}]->o
)
具有类似的参数
{
"maps": [
{
"title":"neography",
"location":"1.."
},{
"title":"coreography",
"location":"3.."
}
]
}
其他建议:
- 根据参数的内部id查找节点通常不太好。在某些情况下,当链接查询时,这可能很好,但在大多数情况下,标签索引查找会更好:
MATCH (n:Word {title:"geography"})
- 如果您没有使用事务性密码端点,请尝试一下。然后,您可以在一个事务中的每个调用中使用一个或多个查询进行一个或更多个调用。性能提高了,您可能会发现不需要发送更复杂的参数对象,但可以发送许多简单的查询