检查我的数据库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

cypher的MERGE是:http://docs.neo4j.org/chunked/stable/query-merge.html。and http://www.catb.org/esr/faqs/smart-questions.html也可能是一个很好的阅读。

最新更新