使用Python在Neo4j中获取节点ID

时间:2013-06-18 17:37:24

标签: neo4j cypher

我最近开始使用Neo4j并且正在努力了解事情的运作方式。我正在尝试在我的脚本中创建的节点之间创建关系。我发现的密码查询看起来应该可以工作,但我不知道如何获取id来替换#的

START a= node(#), b= node(#)
CREATE UNIQUE a-[r:POSTED]->b
RETURN r

5 个答案:

答案 0 :(得分:5)

如果您想使用普通密码,documentation有很多用法示例。

创建节点时,您可以return them(或通过返回id(a)只显示其ID),如下所示:

CREATE (a {name:'john doe'}) RETURN a

这样你可以保持id来添加关系。

如果要在以后添加关系,则不应使用节点的内部标识从外部系统引用它们。例如,如果删除并创建节点,则可以重复使用它们。

您可以通过全部扫描并使用WHERE进行过滤来搜索节点,也可以向数据库添加index,例如:如果在名称上添加auto_index:

START n = node:node_auto_index(name='john doe') 

并从那里继续。 Neo4j 2.0将透明地支持索引查找,以便MATCH和WHERE应该同样有效。

如果您正在使用python,您还可以查看py2neo,它使用cypher和REST接口与服务器进行通信时为您提供更加pythonic的界面。

答案 1 :(得分:2)

这可能就是你要找的东西:

START n = node(*) , x = node(*) 
Where x<>n 
CREATE UNIQUE n-[r:POSTED]->x 
RETURN r

它将在所有节点之间创建POSTED关系,如此

+-----------------------+
| r                     |
+-----------------------+
| (0)-[10:POSTED]->(1)  |
| (0)-[10:POSTED]->(2)  |
| (0)-[10:POSTED]->(3)  |
| (1)-[10:POSTED]->(0)  |
| (1)-[10:POSTED]->(2)  |
| (1)-[10:POSTED]->(3)  |
| (2)-[10:POSTED]->(0)  |
| (2)-[10:POSTED]->(1)  |
| (2)-[10:POSTED]->(3)  |
| (3)-[10:POSTED]->(0)  |
| (3)-[10:POSTED]->(1)  |
| (3)-[10:POSTED]->(2)  |

如果你不想要参考节点(0)和其他节点之间的关系,你可以像这样进行查询

START n = node(*), x = node(*) 
WHERE x<>n AND id(n)<>0 AND id(x)<>0 
CREATE UNIQUE n-[r:POSTED]->x 
RETURN r

结果就是这样:

+-----------------------+
| r                     |
+-----------------------+
| (1)-[10:POSTED]->(2)  |
| (1)-[10:POSTED]->(3)  |
| (2)-[10:POSTED]->(1)  |
| (2)-[10:POSTED]->(3)  |
| (3)-[10:POSTED]->(1)  |
| (3)-[10:POSTED]->(2)  |

答案 2 :(得分:0)

在客户端使用Javascript我发布了密码查询:

start n = node(*) WHERE n.name = '" + a.name + "' return n

然后以以下形式解析响应“self”中的id号:

server_url:7474/db/data/node/node_id

答案 3 :(得分:0)

经过几个小时的尝试,我终于找到了我想要的东西。我正在努力研究如何返回节点并发现

userId=person[0][0][0].id

会返回我想要的东西。谢谢你的帮助!

答案 4 :(得分:0)

使用py2neo,我发现的方法非常有用,就是使用远程模块。

from py2neo import Graph, remote
graph = Graph()
graph.run('CREATE (a)-[r:POSTED]-(b)')

a = graph.run('MATCH (a)-[r]-(b) RETURN a').evaluate()
a_id = remote(a)._id
b = graph.run('MATCH (a)-[r]-(b) WHERE ID(a) = {num} RETURN b', num=a_id).evaluate()
b_id = remote(b)._id

graph.run('MATCH (a)-[r]-(b) WHERE ID(a)={num1} AND ID(b)={num2} CREATE (a)-[x:UPDATED]-(b)', num1=a_id, num2=b_id)

远程函数接收py2neo Node对象,并具有_id属性,可用于从图形数据库中返回当前ID号。