检查我的数据库Neo4j中是否存在节点

时间:2014-03-08 09:36:43

标签: python-2.7 neo4j tweepy py2neo node-neo4j

请我检查并创建节点以及与预先存在的节点的关系。

我需要检查节点是否预先存在于我的Neo4j数据库中,并创建节点加上与该节点的关系。

谢谢

3 个答案:

答案 0 :(得分:2)

以下是使用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/

答案 1 :(得分:1)

查看用于Cypher支持的py2neo文档,并使用这样的合并查询:

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

答案 2 :(得分:0)