在py2neo中的预先存在的节点上创建关系

时间:2015-12-09 17:43:40

标签: python neo4j py2neo

我正在尝试在Neo4j中创建一个简单的图形。我想要做的是创建一个节点,如果它不存在,如果它已经存在,我想连接一个新节点而不是创建一个类似的节点。

一个节点是用户节点,其他节点是餐馆名称,菜肴和位置。如果一家餐厅提供已经作为节点存在的美食,我想将该餐厅连接到预先存在的美食节点。

def add_restaurant(self, name, cuisine, location):
    user=self.find()
    restaurant = Node("Restaurant", id=str(uuid.uuid4()),name=name)
    #graph.create(restaurant)
    graph.create_unique(rel(user,"LIKES", restaurant))

    rest_type = Node("Cuisine", cuisine=cuisine)
    #graph.create(rest_type)
    graph.create_unique(rel(restaurant,"SERVES", rest_type))

    loc = Node("Location", location=location)
    #graph.create(loc)
    graph.create_unique(rel(restaurant, "IN", loc))

此代码有效,但每次添加美食或位置时都会创建一个新节点。在py2neo中是否有办法找到已存在的节点并在其上建立关系,以便我可以拥有更多连接图?

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找graph.merge_one()功能:

rest_type = graph.merge_one("Cuisine", "cuisine", cuisine)
graph.create_unique(rel(restaurant,"SERVES", rest_type))
loc = graph.merge_one("Location", "location", location)
graph.create_unique(rel(restaurant, "IN", loc))

这使用MERGE函数作为“获取或创建”,它基于为属性指定的Label和key值:如果存在匹配的节点,它将返回它,如果不存在,则它将返回创建并返回。