首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个非常困难的Neo4j问题来模仿双for循环?

一个非常困难的Neo4j问题来模仿双for循环?
EN

Stack Overflow用户
提问于 2021-06-16 23:30:46
回答 1查看 39关注 0票数 0

我有三种节点:me(一个节点)、myFriendfriendOfFriend,我想:

me.

  • Create

  • memyFriend之间创建关系,其中两个属性具有相同的值,

  • friendfriendOfFriend之间创建关系,其中friendfriendOfFriend具有两个属性相同的值,而friendOfFriend应该排除mefriendOfFriend之间的关系,其中两个属性的值相同,但friendOfFriend应该排除friend.。

我对neo4j很陌生,我发现这些文档很难阅读,提供的信息也很少。/例如如何使用基本工具,相反,它详细地写着“是的,我们很好,请资助我们”。无论如何,让我们看看我的需求的伪代码版本:

代码语言:javascript
复制
match (me) where me.a1="Rain"

for i in range(all_nodes):
    CONSTANT_ME = [me.a2, me.a3]  #  <------- How to #1
    if i.a2 in CONSTANT_ME:
        # create friend relationship between me and i.

for i in range(friend):
    CONSTANT_FRIEND = [friend.a2, friend.a3]
    for j in range(friend):
        if j.a2 in CONSTANT_FRIEND
        AND j.a3 in CONSTANT_FRIEND:
            # create FF relationship between node i and j

我想用Neo4j的Cypher语言写上面的内容,我试过的是:

代码语言:javascript
复制
MATCH (me:Classmate), (c:Classmate)
WHERE ID(me) < ID(c)
AND me.a1="Rain" AND c.a1<>"Rain"
AND ANY(x in [me.a2, me.a3] WHERE x in [c.a2, c.a3])
CREATE (me)-[:friend]->(c);

MATCH (c1:Classmate), (c2:Classmate)
WHERE ID(c1) < ID(c2)
AND c1.a1<>"Rain" AND c2.a1<>"Rain"
AND ANY(x in [c1.a2, c1.a3] WHERE x in [c2.a2, c2.a3])
CREATE (c1)-[:friendOfFriend]->(c2);

MATCH (me:Classmate), (c2:Classmate)
WHERE ID(me) < ID(c2)
AND c1.a1="Rain" AND c2.a1<>"Rain"
AND ANY(x in [me.a2, me.a3] WHERE x in [c2.a2, c2.a3])
CREATE (me)-[:meFF]->(c2);

正如你所看到的,这是非常冗长的,我无法阻止:

  • 重复代码是错误的:[me.a2, me.a3]被声明了两次。
  • i不能阻止为一个已经使用[:friend]的节点创建[:meFF]

最后,有没有人推荐一些关于Neo4j的好教程,其中包括如何解决我遇到的问题?

EN

回答 1

Stack Overflow用户

发布于 2021-06-18 16:22:02

你必须学会不同的想法。图改变了你的世界观!

我,我的朋友,我朋友的朋友都是人。因此,您需要一个节点标签和3个节点链接在一起。尝尝这个

代码语言:javascript
复制
create (p1:Person{name:'Me'})
create (p2:Person{name:'My Friend'})
create (p3:Person{name:'Friend of my Friend'})
merge (p1)-[r1:friend]-(p2)
merge (p2)-[r2:friend]-(p3)

然后

代码语言:javascript
复制
match p=(a:Person{name:'Me'})-[r:friend*0..5]->(b:Person) return p
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68011149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档