Neo4j 中节点之间的循环关系
cyclic relationships between nodes in neo4j
我正在使用 neo4j 和 python(使用 py2neo),我需要用这个密码查询 http://i.imgur.com/1rLOdiq.png , in the database. Currently i have this, http://i.imgur.com/wxsY6YO.png 来输入这样的东西
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 是我在数据库中的图表。
- src.k_1_mer 和 dst.k_1_mer 是节点名称
我的想法是得到第一张图片的图,在数据库中对应的循环关系。
希望这已经足够清楚了。
谢谢你的时间。
所以,这很简单。
这是对上图的查询:
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浏览器即可验证
结果:
注意:小心使用MERGE
语句,不要在不需要时过度使用它们。
在两个节点之间拥有相同关系的相同副本是一种资源浪费。您可以改为维护单个关系的计数 属性。 MERGE
子句的可选 ON CREATE
和 ON MATCH
子句使这变得非常容易。
例如:
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;
我正在使用 neo4j 和 python(使用 py2neo),我需要用这个密码查询 http://i.imgur.com/1rLOdiq.png , in the database. Currently i have this, http://i.imgur.com/wxsY6YO.png 来输入这样的东西
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 是我在数据库中的图表。
- src.k_1_mer 和 dst.k_1_mer 是节点名称
我的想法是得到第一张图片的图,在数据库中对应的循环关系。 希望这已经足够清楚了。 谢谢你的时间。
所以,这很简单。
这是对上图的查询:
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浏览器即可验证
结果:
注意:小心使用MERGE
语句,不要在不需要时过度使用它们。
在两个节点之间拥有相同关系的相同副本是一种资源浪费。您可以改为维护单个关系的计数 属性。 MERGE
子句的可选 ON CREATE
和 ON MATCH
子句使这变得非常容易。
例如:
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;