neo4j create(创造数据)

介绍

子句CREATE允许您创建节点和关系。要定义这些实体,CREATE使用与 类似的语法MATCH。但是,虽然模式只需要评估为真或假,但 的语法CREATE需要准确指定要创建的节点和关系。

节点语法

CREATE子句允许您创建一个或多个节点。每个节点都可以分配标签和属性。您可以将每个节点绑定到一个变量,以便稍后在查询中引用该变量。多个标签用冒号分隔。

询问
CREATE (charlie:Person:Actor {name: 'Charlie Sheen'}), (oliver:Person:Director {name: 'Oliver Stone'})

从 Neo4j 5.18 开始,多个标签也可以用 & 符号分隔&,方式与标签表达式中的用法相同。 冒号:和 & 符号分隔&不能在同一个子句中混合使用。

询问
CREATE (charlie:Person&Actor {name: 'Charlie Sheen'}), (oliver:Person&Director {name: 'Oliver Stone'})

上述两个查询都会创建两个节点,绑定到变量charlieoliver,每个节点都有一个Person标签和一个name属性。代表 Charlie Sheen 的节点也具有标签,Actor而代表 Oliver Stone 的节点则被分配了标签Director

关系语法

还可以使用CREATE子句创建关系。与节点不同,关系始终只需要一种关系类型和一个方向。与节点类似,关系可以分配属性和关系类型,并绑定到变量。

询问
CREATE (charlie:Person:Actor {name: 'Charlie Sheen'})-[:ACTED_IN {role: 'Bud Fox'}]->(wallStreet:Movie {title: 'Wall Street'})<-[:DIRECTED]-(oliver:Person:Director {name: 'Oliver Stone'})

此查询创建了PersonCharlie Sheen 和 Oliver Stone 的节点以及Movie华尔街的节点。它还创建了它们之间的类型ACTED_IN关系DIRECTED

重用变量

上例在指定节点之间创建了一条路径。请注意,这些新创建的节点和关系与图中先前的内容无关。要将它们连接到现有数据,请将所需的节点和关系绑定到变量。然后,这些变量可以传递给查询中针对图中预先存在的元素的后续子句。

询问
MATCH (charlie:Person {name: 'Charlie Sheen'}), (oliver:Person {name: 'Oliver Stone'})
CREATE (charlie)-[:ACTED_IN {role: 'Bud Fox'}]->(wallStreet:Movie {title: 'Wall Street'})<-[:DIRECTED]-(oliver)

在此示例中,该MATCH子句找到节点 Charlie Sheen 和 Oliver Stone,并分别将它们绑定到charlieoliver变量。然后,这些变量被传递给后续CREATE子句,该子句根据绑定节点创建新的关系。

您还可以CREATE在同一个子句或后续子句中重复使用同一个子句中的变量。这样,您就可以定义比线性路径更复杂的结构。

询问
CREATE p = (charlie:Person:Actor {name: 'Charlie Sheen'})-[:ACTED_IN {role: 'Bud Fox'}]->(wallStreet:Movie {title: 'Wall Street'})<-[:DIRECTED]-(oliver:Person:Director {name: 'Oliver Stone'}), (wallStreet)<-[:ACTED_IN {role: 'Gordon Gekko'}]-(michael:Person:Actor {name: 'Michael Douglas'})
RETURN length(p)

为查理·辛、奥利弗·斯通和迈克尔·道格拉斯创建所有三个节点,并将它们全部连接到代表华尔街电影的节点。然后返回从查理·辛到奥利弗·斯通的路径长度。

请注意,重复节点的变量时,不能向重复添加标签或属性。

询问
MATCH (charlie:Person {name: 'Charlie Sheen'})
CREATE (charlie:Actor)

此查询将失败,因为变量charlie已绑定到预先存在的节点,因此无法重新使用它来创建新节点。如果您打算添加标签,请改用SET子句

在属性中重用变量

可以通过表达式定义可分配给节点或关系的属性的值。

询问
MATCH (person:Person)
  WHERE person.name IS NOT NULL
CREATE (anotherPerson:Person {name: person.name, age: $age})

此示例创建了一个Person与另一个人同名的节点,并且年龄来自名为 的参数age

这样的表达式不能包含对在同一CREATE语句中定义的变量的引用。这是为了确保属性的值始终清晰。

询问
CREATE (charlie {score: oliver.score + 1}), (oliver {score: charlie.score + 1})

此查询尝试创建节点,使得 Charlie 的分数高于 Oliver 的分数,反之亦然,但这是矛盾的。因此查询失败。

使用参数CREATE

创建带有属性参数的节点

您还可以从映射中创建图形实体。映射中的所有键/值对都将设置为所创建关系或节点的属性。在本例中,我们Person还为节点添加了一个标签。

参数
{
  "props": {
    "name": "Andy",
    "position": "Developer"
  }
}
询问
CREATE (n:Person $props)
RETURN n
表 1. 结果
n

行数:1
已创建节点:1
已设置属性:2
已添加标签:1

Node[2]{name:"Andy",position:"Developer"}

创建多个节点并使用其属性参数

通过为 Cypher ®提供一组地图,它将为每个地图创建一个节点。

参数
{
  "props": [ {
    "name": "Andy",
    "position": "Developer"
  }, {
    "name": "Michael",
    "position": "Developer"
  } ]
}
询问
UNWIND $props AS map
CREATE (n)
SET n = map
表 2. 结果

行数:0
创建的节点数:2
设置的属性数:4

(empty result)

INSERT作为的同义词CREATE

在 5.18 中引入

INSERT可以用作创建节点和关系的同义词,并作为 Cypher 的GQL 一致性CREATE的一部分引入。但是,要求多个标签用 & 符号分隔,而不是用冒号分隔。INSERT&:

询问
INSERT (tom:Person&Actor&Director {name: 'Tom Hanks'})

创建一个节点,绑定到变量tom,并带有标签PersonActorDirectorname属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京橙溪 www.enwing.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值