-1

如何使用普通密码查询创建和更新节点和属性?

以下是我的查询:

MERGE (c:contact {guid : '500010'})
ON CREATE SET
    c.data_source = '1',
    c.guid = '500010',
    c.created = timestamp()
ON MATCH SET
    c.lastUpdated = timestamp()
MERGE (s:speciality {specialtygroup_desc : 'cold'})
ON CREATE SET s.data_source = '1',
    s.specialtygroup_desc = 'fever',
    s.created = timestamp()
ON MATCH SET s.data_source = '1',
    s.specialtygroup_desc = 'comman cold',
    s.lastUpdated = timestamp()
MERGE (c)-[r:is_specialised_in]->(s)
ON CREATE SET
    r.duration = 1
ON MATCH SET
    r.duration = r.duration + 1

在第一次运行时,节点被创建为“发烧”。在第二次运行中,我已将 special_group 更新为“普通感冒”。但它正在用“发烧”创建新节点。我无法将“发烧”更新为“普通感冒”。我应该对上述查询进行哪些更改?

4

2 回答 2

0

我想你想将所有节点“感冒”更新为“普通感冒”,如果不存在“感冒”或“普通感冒”,创建新的“发烧”?我的建议:

OPTIONAL MATCH (ss:speciality {specialtygroup_desc : 'cold'}
SET ss.specialtygroup_desc='common cold', ss.lastUpdated = timestamp()
MERGE (c:contact {guid : '500010'})
ON CREATE SET
    c.data_source = '1',
    c.guid = '500010',
    c.created = timestamp()
ON MATCH SET
    c.lastUpdated = timestamp()
MERGE (s:speciality {specialtygroup_desc : 'common cold'})
ON CREATE SET s.data_source = '1',
    s.specialtygroup_desc = 'fever',
    s.created = timestamp()

MERGE (c)-[r:is_specialised_in]->(s)
ON CREATE SET
    r.duration = 1
ON MATCH SET
    r.duration = r.duration + 1
于 2020-04-13T13:34:25.593 回答
0

MERGE (s:speciality {specialtygroup_desc : 'cold'})子句查找specialtygroup_desc“冷”值。

在第一次执行期间,该MERGE子句没有找到“冷”节点——因此它创建了一个,随后的ON CREATE子句将其更改为“发烧”。

在第二次执行期间,它MERGE再次没有找到“冷”节点(因为它现在是“发烧”节点),所以它再次创建了一个“冷”节点,并且该ON CREATE子句再次将其更改为“发烧”。ON MATCH从不使用该子句。这就是为什么您最终会出现另一个“发烧”节点。

不幸的是,您没有足够详细地解释您的用例以提供有关如何修复代码的建议。

于 2020-03-30T18:28:59.173 回答