玩简单的neo4j查询。我的基本匹配是:
MATCH (:Movie { id: '10' })-[*0..3]-(p:Producer)
RETURN p.id
这会返回一些结果,所以很明显,movie-10和任何制作人都有一些关系。结果集的一部分是:
'producer_12'
'producer_18'
'producer_36'
.........
现在我想返回movie-10和producer_12或者producer_18之间的所有关系,最多3个跃点。我修改了我的比赛。
MATCH (:Movie { id: '10' })-[*0..3]-(p:Producer)
WHERE p.id IN ['producer_12', 'producer_18']
RETURN p.id
这已经没有任何价值,而我期望生产者12和18能够得到答案。此外,我找不到标记关系的方法。这是不被接受的。 [R:* 0..3]。
我的最终查询必须是获得2组(电影10,12或15)和(制片人12或18)之间的所有关系。
答案 0 :(得分:1)
我在这里模拟你的场景。
样本数据:
CREATE (movie:Movie {id : '10'})
CREATE (producer12:Producer {id:'producer_12'})
CREATE (producer18:Producer {id:'producer_18'})
CREATE (producer36:Producer {id:'producer_36'})
CREATE (movie)-[:PRODUCTED_BY]->(producer12)
CREATE (movie)-[:PRODUCTED_BY]->(producer18)
CREATE (movie)-[:PRODUCTED_BY]->(producer36)
查询:
MATCH (:Movie { id: '10' })-[*0..3]-(p:Producer)
WHERE p.id IN ['producer_12', 'producer_18']
RETURN p.id
结果:
╒═════════════╕
│"p.id" │
╞═════════════╡
│"producer_12"│
├─────────────┤
│"producer_18"│
└─────────────┘
id
个:Movie
节点的string
属性可能不是integer
而是MATCH (:Movie { id: 10 })-[*0..3]-(p:Producer)
WHERE p.id IN ['producer_12', 'producer_18']
RETURN p.id
。因此,请尝试将查询更改为:
'10'
即:将10
更改为:
。
此外,我找不到标记关系的方法。这不是 公认。 [R:* 0..3]。
这是因为您没有在关系中使用类型。 [r:SOME_TYPE*0..3]
仅与类型结合使用(例如,:
)。以这种方式删除[r *0..3]
:MATCH (n)-[rs*]-() RETURN rs
。
修改强>
来自评论:
关于最后一句:它仍然有效,但它说“这个 功能已弃用,将在以后的版本中删除。捆绑 不推荐使用可变长度模式列表的关系“ - user732456 3小时前
自3.2.0-rc1以来,不推荐将关系绑定到可变长度模式中的列表。
根据pull request Cypher的查询:
MATCH p=(n)-[*]-() RETURN relationships(p) AS rs
将生成警告,并且编写相同查询的规范方法是:
| id | domainIP |
| foo | 158.132.34.5 |
| bob | 128.12.244.3 |
| bob | 128.12.244.3 |
| bob | 19.152.134.4 |
| bob | 168.152.34.9 |
| alice | 178.132.64.10 |
| alice | 188.152.214.200 |
| peter | 208.162.36.153 |
| peter | 208.162.36.153 |
| peter | 208.162.36.153 |
| peter | 198.168.94.201 |