Neo4j如果节点存在,则添加/更新属性

时间:2016-02-07 15:48:23

标签: neo4j cypher

我希望能够通过上传该数据库的新版本或该数据库的一部分来update/enlarge我的Neo4j数据库。

我发现我可以使用MERGEadd新节点,只要它们不存在。但是在这个过程中,如果现有节点不存在,我如何以细长的方式add新属性?

我是,如果我有一个节点'John' of 'Age:34' and 'Hair:brown'并上传'John'/'Age:34'/'Coat:Yellow' - 我该如何获得'John'/'Age:34'/'Hair:brown'/'Coat:Yellow'

3 个答案:

答案 0 :(得分:25)

您可以合并 John (或主要识别属性)上的节点。然后在成功合并后设置属性。

您可以使用所有属性的地图一次性设置它们

MERGE (n:Node {name: 'John'})
SET n = {name: 'John', age: 34, coat: 'Yellow', hair: 'Brown'}
RETURN n

如果您只想更换属性年龄大衣,则可以改为执行此操作。

MERGE (n:Node {name: 'John'})
SET n.age = 34, n.coat = 'Yellow'
RETURN n 

或者您也可以将其添加为地图

MERGE (n:Node {name: 'John'})
SET n += {age: 34, coat: 'Yellow'}
RETURN n 

答案 1 :(得分:0)

MERGE保证节点随后将存在(匹配或创建)。如果您不想创建节点,则需要使用MATCH。 (由于您说“如果节点存在”,则意味着不应创建该节点)

最简单的方法是

MATCH (n{id:{uuid}) SET n.prop=true

如果比赛失败,他们将无事可做SET。

假设您希望在此之后仍然有行; (对于更复杂的查询),您可以将匹配设置为可选

...
OPTIONAL MATCH (n{id:{uuid}) SET n.prop=true

同样,如果匹配失败,n将为null,而SET将不执行任何操作

答案 2 :(得分:-1)

如何向已经存在的节点添加多个属性

#payload={"query" : 
      " MATCH (t:TvSeries{id:{id})SET t.next_episode_to_air_air_date:
{next_episode_to_air_air_date},next_episode_to_air_episode_number:
{next_episode_to_air_episode_number},next_episode_to_air_id:
{next_episode_to_air_id},next_episode_to_air_name:
{next_episode_to_air_name},next_episode_to_air_overview:
{next_episode_to_air_overview},next_episode_to_air_production_code:
{next_episode_to_air_production_code},next_episode_to_air_season_number:
{next_episode_to_air_season_number},next_episode_to_air_show_id_id:
{next_episode_to_air_show_id},next_episode_to_air_still_path: 
{next_episode_to_air_still_path},next_episode_to_air_vote_average: 
{next_episode_to_air_vote_average},next_episode_to_air_vote_count: 
{next_episode_to_air_vote_count}RETURN t"}

        payload['params'] = params
        response_json = callNeo4j(payload, headers)