Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在neo4j中建立关系_Neo4j - Fatal编程技术网

在neo4j中建立关系

在neo4j中建立关系,neo4j,Neo4j,我不确定我在这里做错了什么,所以下面是我如何创建节点的 CREATE (urlnode_1:UrlNode {url:'url1', nodenumber:1}) CREATE (urlnode_2:UrlNode {url:'url2', nodenumber:2}) 我创建如下关系 CREATE (urlnode_1)-[:OutLink {anchor_text:['MY']}]->(urlnode_2) 首先成功创建了两个节点,现在运行代码来创建关系,我希望该关系存在于两个创建

我不确定我在这里做错了什么,所以下面是我如何创建节点的

CREATE (urlnode_1:UrlNode {url:'url1', nodenumber:1})
CREATE (urlnode_2:UrlNode {url:'url2', nodenumber:2})
我创建如下关系

CREATE
(urlnode_1)-[:OutLink {anchor_text:['MY']}]->(urlnode_2)

首先成功创建了两个节点,现在运行代码来创建关系,我希望该关系存在于两个创建的节点之间,但它创建了两个新节点,比如3和4,并显示了它们之间的关系。我做错了什么?

如果你建立了关系,每次都会建立一个新的关系。它们并非天生独特。听起来你更愿意合并这段关系;i、 例如,如果他们的关系存在,匹配它,如果没有,创建它

它的合并语法如下所示:

MERGE (a:Node)-[:LIKES]->(b:Node)
ON 
MATCH SET a.msg = 'I matched!'
ON 
CREATE SET a.msg = 'I created!'
RETURN a
您可以在这里尝试:


您会注意到,首先
msg
将是“我创建的!”,然后在匹配之后,它将是“我匹配的!”

如果您创建一个关系,每次都会创建一个新的关系。它们并非天生独特。听起来你更愿意合并这段关系;i、 例如,如果他们的关系存在,匹配它,如果没有,创建它

它的合并语法如下所示:

MERGE (a:Node)-[:LIKES]->(b:Node)
ON 
MATCH SET a.msg = 'I matched!'
ON 
CREATE SET a.msg = 'I created!'
RETURN a
您可以在这里尝试:


您会注意到,首先
msg
将是“我创建的!”,然后匹配后,它将是“我匹配的!”

为了尽可能地指导您,让我们总结一下有关节点和关系创建的一些Neo4j基础知识:

一个节点可以有一个或多个标签,标签是指按域(用户、发言人、公司等)对节点进行分组。例如,将标签作为表名查看。节点也可以具有属性

关系只能有一种类型,关系正在组织图形。关系也可以具有属性

要创建节点,可以使用
create
writing子句:

CREATE (n:Person {firstname: 'John'})
CREATE语句不会检查是否已经存在具有相同标签和属性的其他节点,它只会创建一个新节点

也可以使用相同的子句创建关系:

MATCH (n:Person {firstname: 'John'}), (p:Person {firstname: 'Pierre'})
CREATE (n)-[:KNOWS]->(p)
也可以一次性创建完整的图案:

CREATE (n:Person {name:'Chris'})-[:KNOWS]->(p:Person {name:'Oliver'})
提醒:创建将不检查现有节点

---现在合并---

MERGE将延迟检查现有节点,将其视为匹配或CREATE子句:

如果标签为Person且名为Fred的节点不存在,则将创建该节点,否则不会发生任何事情。这就是@joslinm提到的在比赛和创作中得心应手的地方

如果在创建节点后多次运行此查询,则图形不会更改,如果您了解http协议,则可以说合并是一个独立的请求

请注意,“合并”将确保数据库中存在完整的模式,如果该模式不存在,则创建该模式,这意味着如果与完整的模式合并,将查找整个模式的存在性,而不是单个节点:

假设数据库中已存在具有label Person和name属性且值为“John”的节点:

MERGE (n:Person {name:'John'}) 
不会影响图形

然而:

MERGE (n:Person {name:'John'})-[:KNOWS]->(:Person {name:'Nathalia'})
将创建一个新的John节点,因为整个模式不存在

建议以增量方式使用“合并”:

MERGE (n:Person {name:'John'})
MERGE (p:Person {name:'Nathalia'})
MERGE (n)-[:KNOWS]->(p)
如果您想更多地了解MERGE子句,我可以向您推荐这篇来自Luane on GraphAware的精彩文章:


Chris

为了尽我所能为您提供最佳指导,让我们总结一下Neo4j关于节点和关系创建的一些基础知识:

一个节点可以有一个或多个标签,标签是指按域(用户、发言人、公司等)对节点进行分组。例如,将标签作为表名查看。节点也可以具有属性

关系只能有一种类型,关系正在组织图形。关系也可以具有属性

要创建节点,可以使用
create
writing子句:

CREATE (n:Person {firstname: 'John'})
CREATE语句不会检查是否已经存在具有相同标签和属性的其他节点,它只会创建一个新节点

也可以使用相同的子句创建关系:

MATCH (n:Person {firstname: 'John'}), (p:Person {firstname: 'Pierre'})
CREATE (n)-[:KNOWS]->(p)
也可以一次性创建完整的图案:

CREATE (n:Person {name:'Chris'})-[:KNOWS]->(p:Person {name:'Oliver'})
提醒:创建将不检查现有节点

---现在合并---

MERGE将延迟检查现有节点,将其视为匹配或CREATE子句:

如果标签为Person且名为Fred的节点不存在,则将创建该节点,否则不会发生任何事情。这就是@joslinm提到的在比赛和创作中得心应手的地方

如果在创建节点后多次运行此查询,则图形不会更改,如果您了解http协议,则可以说合并是一个独立的请求

请注意,“合并”将确保数据库中存在完整的模式,如果该模式不存在,则创建该模式,这意味着如果与完整的模式合并,将查找整个模式的存在性,而不是单个节点:

假设数据库中已存在具有label Person和name属性且值为“John”的节点:

MERGE (n:Person {name:'John'}) 
不会影响图形

然而:

MERGE (n:Person {name:'John'})-[:KNOWS]->(:Person {name:'Nathalia'})
将创建一个新的John节点,因为整个模式不存在

建议以增量方式使用“合并”:

MERGE (n:Person {name:'John'})
MERGE (p:Person {name:'Nathalia'})
MERGE (n)-[:KNOWS]->(p)
如果您想更多地了解MERGE子句,我可以向您推荐这篇来自Luane on GraphAware的精彩文章:


Chris

这是正常的行为,请看合并语句:neo4j刚使用一天,我遇到了很多问题,例如:即使合并只允许一个关系,但仍然不完美这是正常的行为,请看合并语句:neo4j刚使用一天,我遇到了很多问题,例如:即使合并只允许一个关系,有些问题仍然不好当我合并多个关系时,它仍然会让我出错,说标签已经存在,所以一个节点可以有多个大纲链接您必须至少有两个节点中的一个匹配或预先创建,否则合并无法附加