如何在neo4j中嵌套多个结果?

时间:2016-02-22 17:03:49

标签: neo4j cypher

我正在使用neo4j,我有一个这样的图表:

Collection有许多Image s:

(`Collection`)-[:contains]->(`Image`)

Image有许多Tag s:

(`Image`)-[:has_tag]->(`Tag`)

我想选择具有某些条件的Collection,在嵌套结构中收集链接的图像和标签,以便每行包含不同的Collection,相关图像和标签列表每一张图片。

MATCH (c:`Collection`) WHERE some_condition_on(c) OPTIONAL MATCH (i:`Image`)<-[:contains]-(c) OPTIONAL MATCH (i)-[:has_tag]->(t:`Tag`) RETURN i, collect(????)

例如,输出的输出方式如下:

Node:`Collection `, [
    [Node:`Image`, [Node:`Tag`, Node:`Tag`, Node:`Tag`, Node:`Tag`]],
    [Node:`Image `, [Node:`Tag`, Node:`Tag`, Node:`Tag`, Node:`Tag`]],
    [Node:`Image `, [Node:`Tag`, Node:`Tag`, Node:`Tag`, Node:`Tag`]]
]

有没有办法使用neo4j集合函数来获取它?

1 个答案:

答案 0 :(得分:1)

这可能对您有用:

MATCH (c:Collection)-[:contains]->(i:Image)-[:has_tag]->(t:Tag)
WITH c, [i, COLLECT(t)] AS imgs
RETURN c, COLLECT(imgs) AS images;

每一行都有一个Collection节点,以及一个结构如下的数组:

[
  [(:Image),
    [(:Tag)]
  ],
  [(:Image),
    [(:Tag), (:Tag)]
  ],
  [(:Image),
    [(:Tag)]
  ]
]

注意:上述简单示例仅返回至少包含一个图像的集合,以及至少包含一个标记的图像。