我有三种类型的节点:
me
(一个节点),
myFriend
,
friendOfFriend
,我想:
-
创建之间的关系
我
和
myFriend
其中我们有两个相同值的属性。
-
创建之间的关系
friend
和
朋友的朋友
其中它们有两个相同值的属性,但是
朋友的朋友
应排除
我
.
-
创建之间的关系
我
和
朋友的朋友
其中我们有两个值相同的属性,但是
朋友的朋友
应排除
朋友
.
我是neo4j的新手,我发现文档很难阅读,而且提供的信息很少/关于如何使用基本工具的例子,相反,它在广告上冗长地说“是的,我们很好,请资助我们”。无论如何,让我们看看我的需求的伪代码版本:
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 langauge,我尝试过的是:
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]
被声明了两次。
-
我无法阻止创建
[:meFF]
到一个已经
[:friend]
具有
我
.
最后,有人推荐一些关于Neo4j的好教程吗?它教授了如何解决我遇到的这个问题的基本组成?