我希望能够通过上传该数据库的新版本或该数据库的一部分来update/enlarge
我的Neo4j数据库。
我发现我可以使用MERGE
到add
新节点,只要它们不存在。但是在这个过程中,如果现有节点不存在,我如何以细长的方式add
新属性?
我是,如果我有一个节点'John' of 'Age:34' and 'Hair:brown'
并上传'John'/'Age:34'/'Coat:Yellow'
- 我该如何获得'John'/'Age:34'/'Hair:brown'/'Coat:Yellow'
。
答案 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)