我正在尝试在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
中是否有办法找到已存在的节点并在其上建立关系,以便我可以拥有更多连接图?
答案 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值:如果存在匹配的节点,它将返回它,如果不存在,则它将返回创建并返回。