【问题标题】:Neo4J avoid duplicates on cyclic graphNeo4J 避免循环图上的重复
【发布时间】:2016-01-13 16:17:58
【问题描述】:

我有一张PERSON 的图表,PERSON 可以是FRIENDs 和PERSON,也可以是OWN OBJECT 例如:

a-FRIEND-b
a-FRIEND-c
b-FRIEND-c
c-OWN-"car"

我想让需要某物的人找到拥有该东西的朋友或朋友的朋友,所以我使用:

MATCH (me:PERSON)-[:FRIEND*1..2]-(p:PERSON)-[o:OWN]->(obj:OBJECT)
WHERE me.id = {userId}
RETURN p

但是如果“a”想要“car”,我会得到“c”两次,因为我可以通过两种方式到达那里:

a-FRIEND-c-OWN-"car"
a-FRIEND-b-FRIEND-c-OWN-"car"

如何确保我只得到“c”一次?

【问题讨论】:

    标签: graph neo4j cypher


    【解决方案1】:

    只需将DISTINCT 修饰符添加到您的返回语句:

    MATCH (me:PERSON)-[:FRIEND*1..2]-(p:PERSON)-[o:OWN]->(obj:OBJECT) 
    WHERE me.id = {userId} 
    RETURN DISTINCT p
    

    【讨论】:

    • 或者您也可以RETURN p, count(*) 指出有多少路径,这可能表明强度
    • 你可以嵌入 id 检查 ;-) ... MATCH (me:PERSON {id: {userId}}) ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多