请我无法检查和创建节点以及与预先存在的节点的关系。
我需要检查我的 Neo4j 数据库中是否预先存在节点并创建与该节点的节点加关系。
谢谢
请我无法检查和创建节点以及与预先存在的节点的关系。
我需要检查我的 Neo4j 数据库中是否预先存在节点并创建与该节点的节点加关系。
谢谢
以下是您如何将现有数据与您使用 Cypher 2.0(Neo4j 的本地语言)动态创建的数据合并:
MERGE ({ name: "Jane" })-[r:KNOWS]->({ name: "John" })
事实上,这些数据都不需要预先存在。这一切都将在飞行中创建,关系和所有。但是没有太多的检查,如果你犯了一个小错误,很容易用这种方式创建重复的条目。因此,事先检查是个好习惯。
以下是使用 Cypher 检查节点是否已存在的方法:
MATCH (n:SomeNode {some_field: "some_discrete_data"}) RETURN n;
在您的情况下,它可能类似于:
MATCH (n {id: 1}) RETURN n;
如果有一个节点的字段包含您需要的数据(在这种情况下,我假设它是{id: 1}
,但您当然可能想要其他东西),它将被返回。如果没有,它将返回 0 个节点。
警告:如果您不描述您需要的数据,即{id: 1}
,将返回数据库中的所有节点,您可能不希望这样。
但是,您不能只与一个节点建立关系。您至少需要两个节点才能在它们之间创建关系。所以我们将创建另一个:
CREATE (:OtherNode {id: 2});
要将此新节点与预先存在的节点建立关系,您需要使用 找到它们MATCH
,然后创建关系。这是一个例子:
MATCH (node1 {id: 1}), (node2 {id: 2})
CREATE (node1)<-[:LIKES]-(node2);
表示 node2将<-
与已经存在的 node1 有方向关系。
但是,您只需一步即可完成此过程;即检查一个节点是否已经存在,并同时添加一个新节点以及新节点和先前存在的节点之间的关系!您可以使用以下UNIQUE
关键字执行此操作:
MATCH (node1 {id: 1})
CREATE UNIQUE (node1)<-[:LIKES]-(node2 {id: 2});
只要 node1 已经存在,如果 node2 及其与 node1 的关系不存在,就会创建它们。但是,如果 node1 不存在,则不会发生任何事情。恕我直言,如果您想避免重复,这是一个很好的安全功能。
至于 Python-spesific API,您必须检查与您使用的编程语言相关的语言驱动程序的文档。大多数驱动程序以某种形式接受 Cypher。这是有关 Python 的相关部分:http: //book.py2neo.org/en/latest/cypher/
查看 py2neo 文档以获取 Cypher 支持,并仅使用如下合并查询:
MERGE (user:User {name:"John"}) // get-or-crate
MERGE (friend:User {name:"Jane"}) // create friend
MERGE (user)-[r:KNOWS]->(friend) // create relationship
RETURN user,r,friend
CypherMERGE
就是这样:http ://docs.neo4j.org/chunked/stable/query-merge.html 。http://www.catb.org/esr/faqs/smart-questions.html也可能是一本好书。