我最近开始使用 Neo4j 并且正在努力理解事情是如何工作的。我正在尝试在我之前在脚本中创建的节点之间创建关系。我发现的密码查询看起来应该可以工作,但我不知道如何让 id 替换 # 的
START a= node(#), b= node(#)
CREATE UNIQUE a-[r:POSTED]->b
RETURN r
如果您想使用普通密码,文档中有很多使用示例。
当您创建节点时,您可以返回它们(或通过返回它们的 id id(a)
),如下所示:
CREATE (a {name:'john doe'}) RETURN a
这样,您可以保留 id 以添加关系。
如果以后要附加关系,则不应使用节点的内部 id 从外部系统引用它们。例如,如果您删除和创建节点,它们可以被重新使用。
您可以通过扫描所有节点并使用过滤WHERE
或向数据库添加索引来搜索节点,例如,如果您在名称上添加 auto_index:
START n = node:node_auto_index(name='john doe')
并从那里继续。Neo4j 2.0 将透明地支持索引查找,因此 MATCH 和 WHERE 应该同样有效。
如果您使用的是 python,您还可以查看py2neo,它在使用 cypher 和 REST 接口与服务器通信时为您提供了更 Pythonic 的接口。
这可能是您正在寻找的:
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) |
在客户端使用 Javascript 我发布密码查询:
start n = node(*) WHERE n.name = '" + a.name + "' return n
然后从响应“self”中解析id号,格式如下:
server_url:7474/db/data/node/node_id
经过几个小时的尝试,我终于找到了我想要的东西。我一直在努力解决节点如何返回并发现
userId=person[0][0][0].id
会返回我想要的。感谢您的所有帮助!
使用 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 节点对象并具有一个 _id 属性,您可以使用该属性从图形数据库中返回当前 ID 号。