2

我有一个图形数据库,它正在对消息的元数据和可以包含在这些消息中的字段进行建模。其中一些字段可以是“组”,它们是其他字段的组。我试图问 Neo 是“什么消息正在使用这个组?”。以下是可用于从消息获取到组的路径类型列表:

message-[:INLINE]->group  (the fields of a group are used inline on a message)
message-[:FIELDREF]->(fref)-[:FIELD]->(field)-[:DATATYPE]->group (the group is used as a data type by a field on the message)

第二个链是递归的。换句话说, -[:FIELDREF]->(fref)-[:FIELD]->(field)-[:DATATYPE]-(group) 段可以一遍又一遍地发生,然后才最终到达我感兴趣的组在。

所以,我想知道的是,我如何在路径中的每个单独元素上请求重复的关系链,而不仅仅是多个(例如关系名称后的 *)?

回顾一下,您可以通过遍历 [:INLINE] 关系从消息中获取组,然后该关系可以遵循 n 个“fieldref-field-datatype-group”链。或者您可以从通过遍历 n 个“fieldref-field-datatype-group”链的消息。

START group=node({sourceGroupId})
... ? ? ? ...

所以我想要 [?:INLINE]-> 0..n of (fieldref-field-datatype-group) 链。

有什么想法吗?

4

1 回答 1

5

根据http://docs.neo4j.org/chunked/milestone/query-match.html上的 Cypher 参考...

12.2.13。可变长度关系 关系数可变的节点→节点跳距可以使用以下语法找到:-[:TYPE*​​minHops..maxHops]->。minHops 和 maxHops 是可选的,分别默认为 1 和无穷大。当没有给出边界时,可以省略点。

我认为您寻求的一个示例如下。我将最小值设置为两个。

start n=node:node_auto_index(name='Neo') match n-[r:KNOWS*2..]-m return n as Neo,r,m

您可以在http://console.neo4j.org上逐字测试此查询

于 2013-05-23T20:43:17.133 回答