说我们有一些这样的数据:
create
(a:Person{name:'andy'})-[:LIKES]->(:Animal{name:'cat'}),
(b:Person{name:'bob'})-[:LIKES]->(:Animal{name:'cat'}),
(c:Person{name:'charlie'})-[:LIKES]->(:Animal{name:'cat'}),
(a)-[:LIKES]->(:Animal{name:'dog'}),
(b)-[:LIKES]->(:Animal{name:'dog'})
我想知道哪个人与安迪具有相同的赞。 安迪喜欢“猫”和“狗”,所以鲍勃应该出现,但查理不是,因为他不喜欢“狗”。
如何形成这样的查询? 我希望该查询可与许多LIKE一起使用,因此在将来有100只动物时,我仍然可以找到与Andy口味相同的人。
我已经尝试过这样的事情
match
(p:Person{name:'andy'})-[:LIKES]->(a:Animal),
(a)<-[:LIKES]-(p2:Person)
return p,a,p2
但这也会返回查理。
答案 0 :(得分:0)
如果您想找到口味完全相同的人,可以使用以下查询:
MATCH (p:Person{name:'andy'})-[:LIKES]->(a:Animal)
WITH collect(a) AS likes
MATCH (p2:Person)
WHERE all(n IN likes WHERE exists((p2)-[:LIKES]->(n)))
RETURN p2, likes