我正在使用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集合函数来获取它?
答案 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)]
]
]
注意:上述简单示例仅返回至少包含一个图像的集合,以及至少包含一个标记的图像。