4

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

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

5 回答 5

5

如果您想使用普通密码,文档中有很多使用示例。

当您创建节点时,您可以返回它们(或通过返回它们的 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 的接口。

于 2013-06-18T19:35:06.230 回答
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)  |
于 2013-06-19T07:49:00.477 回答
0

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

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

然后从响应“self”中解析id号,格式如下:

server_url:7474/db/data/node/node_id

于 2013-06-18T18:43:03.293 回答
0

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

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

会返回我想要的。感谢您的所有帮助!

于 2013-06-19T13:28:08.737 回答
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 节点对象并具有一个 _id 属性,您可以使用该属性从图形数据库中返回当前 ID 号。

于 2017-10-09T19:22:42.910 回答