neo4j中节点之间的循环关系

时间:2015-09-23 01:20:03

标签: python neo4j cypher py2neo

我正在使用neo4j和python(使用py2neo),我需要在数据库中放置这样的内容http://i.imgur.com/1rLOdiq.png。目前我有这个http://i.imgur.com/wxsY6YO.png,这个cypher查询

grafoNeo4j.cypher.execute("merge (n1:k_mer {name : '"+src.k_1_mer+"'}) 
merge (n2:k_mer {name : '"+dst.k_1_mer+"'}) merge (n1)-[:solapa]-(n2)")

其中:

  • grafoNeo4j,是我在db中的图表。
  • src.k_1_mer和dst.k_1_mer是节点名称

我的想法是获取第一张图片的图表,以及数据库中相应的循环关系。 希望这很清楚。 谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

所以,这很简单。

这是对上图的查询:

CREATE (long_:Node {name: "long_"})
CREATE (ong_t:Node {name: "ong_t"})
CREATE (ng_ti:Node {name: "ng_ti"})
CREATE (g_tim:Node {name: "g_tim"})
CREATE (_time:Node {name: "_time"})
CREATE (ong_l:Node {name: "ong_l"})
CREATE (ng_lo:Node {name: "ng_lo"})
CREATE (g_lon:Node {name: "g_lon"})
CREATE (_long:Node {name: "_long"})
CREATE (a_lon:Node {name: "a_lon"})

CREATE (_long)-[:solapa]->(long_)
CREATE (_long)-[:solapa]->(long_)
CREATE (_long)-[:solapa]->(long_)
CREATE (a_lon)-[:solapa]->(_long)
CREATE (long_)-[:solapa]->(ong_l)
CREATE (long_)-[:solapa]->(ong_l)
CREATE (long_)-[:solapa]->(ong_t)
CREATE (ong_t)-[:solapa]->(ng_ti)
CREATE (ng_ti)-[:solapa]->(g_tim)
CREATE (g_tim)-[:solapa]->(_time)
CREATE (ong_l)-[:solapa]->(ng_lo)
CREATE (ong_l)-[:solapa]->(ng_lo)
CREATE (ng_lo)-[:solapa]->(g_lon)
CREATE (ng_lo)-[:solapa]->(g_lon)
CREATE (g_lon)-[:solapa]->(_long)
CREATE (g_lon)-[:solapa]->(_long)

您只需将其复制粘贴到Neo4j浏览器即可验证。

结果:

result

注意:请注意MERGE语句,不要在不需要时过度使用它们。

答案 1 :(得分:1)

在2个节点之间拥有相同关系的相同副本是浪费资源。您可以改为在单个关系上维护计数属性。 ON CREATE子句的可选ON MATCHMERGE子条款使这很容易。

例如:

MERGE (n1:k_mer {name : 'a'}) 
MERGE (n2:k_mer {name : 'b'})
MERGE (n1)-[r:solapa]-(n2)
ON CREATE SET r.cnt = 1
ON MATCH SET r.cnt = r.cnt + 1;