我需要做一件奇怪的事。我有一些无法更改的查询。这是一个用于获取记录的匹配查询:
MATCH (j:journal) WHERE j.id in [12] RETURN j.`id` AS ID, j.`language` AS LANGUAGE
我有一些包含数组作为属性的节点:例如可以这样创建:create (j:journal {id:12, language:[“English”, “Polish”]})
那么,是否有可能像显示具有相同id但具有不同语言字段的两条记录一样显示此节点?如下所示:
ID |语言
12 |英文
12 |波兰语
重要的是,匹配查询完全不能更改。 但是节点可以更改。
我知道我可以在源查询中为语言字段添加UNWIND关键字。但是有一个要求不要这样做。
我在文档或互联网上都找不到类似的内容。我不确定是否有可能(但消费者希望这样做)。只是我对neo4j没有太多经验。
我知道这听起来很奇怪,但是我需要了解它是否可以这种方式实现。
先谢谢了。
答案 0 :(得分:1)
如果可以更改数据库,则可以对其进行更改,以使每个journal
节点都包含一种语言(作为标量值,不在列表中)。但是,此更改可能会中断您可能遇到的所有其他查询。
如果此转换是可接受的,则此查询应:(a)将现有的journal
节点转换为标量language
的值,以及(b)创建新的journal
节点对于剩余的语言值来说是必要的。从原始journal
节点派生的节点将共享相同的属性(language
除外)。
MATCH (j:journal)
WITH j, j.language[1..] AS langs
SET j.language = j.language[0]
WITH j, langs
UNWIND langs AS lang
CREATE (k:journal)
SET k = j, k.language = lang
如果节点的language
属性具有N个值,则最终将得到N个节点,每个节点具有相同的属性-language
属性的除外,这将包含其他语言值(作为字符串)。为了提高效率,原始节点被重用。