根据属性neo4j中的多个值显示两个分开的记录

时间:2018-07-24 12:55:24

标签: neo4j

我需要做一件奇怪的事。我有一些无法更改的查询。这是一个用于获取记录的匹配查询:

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没有太多经验。

我知道这听起来很奇怪,但是我需要了解它是否可以这种方式实现。

先谢谢了。

1 个答案:

答案 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属性的除外,这将包含其他语言值(作为字符串)。为了提高效率,原始节点被重用。