按字段查找图节点,更新所有其他字段
Find a graph node by a field, update all other fields
我有一个 Neo4J 图形数据库,我想在其中存储用户和他们之间的关系。
我希望能够使用 .Net 用户对象中包含的数据更新我通过 GUID 找到的用户节点。理想情况下,我想知道如何在 Neo4JClient 中执行此操作,但即使是普通的 Cypher 查询也可以。
理想情况下,我想使用整个对象,不知道哪些属性已被修改,并替换所有对象 - 包括数组属性 - 不像下面的示例知道 PhoneNumber 将被更新
像这样:
MATCH (n:`User` {Id:'24d03ce7-8d23-4dc3-a13b-cffc0c7ce0d8'})
MERGE (n {PhoneNumber: '123-123-1234'})
RETURN n
上面代码的问题在于MERGE
重新定义了n
我得到这个错误:
n already declared (line 2, column 8) "MERGE (n {PhoneNumber: '123-123-1234'})" ^
如果您只想完全替换所有现有节点的属性,请不要使用MERGE
。您应该只使用 MATCH
和 SET
所有属性。像这样:
MATCH (n:`User` {Id:'24d03ce7-8d23-4dc3-a13b-cffc0c7ce0d8'})
SET n = {PhoneNumber: '123-123-1234', Age: 32}
RETURN n;
另一方面,如果你想创建一个新的节点当且仅当具有指定Id
的节点还不存在,并且你还想完全替换新节点或现有节点,您可以这样做:
MERGE (n:`User` {Id:'24d03ce7-8d23-4dc3-a13b-cffc0c7ce0d8'})
SET n = {PhoneNumber: '123-123-1234', Age: 32}
RETURN n;
注意:在上述查询中,n
的所有现有属性将在添加新属性之前被删除。此外,分配给 SET
子句中的 n
的映射可以作为参数传递给查询(因此不需要硬编码)。
我有一个 Neo4J 图形数据库,我想在其中存储用户和他们之间的关系。
我希望能够使用 .Net 用户对象中包含的数据更新我通过 GUID 找到的用户节点。理想情况下,我想知道如何在 Neo4JClient 中执行此操作,但即使是普通的 Cypher 查询也可以。
理想情况下,我想使用整个对象,不知道哪些属性已被修改,并替换所有对象 - 包括数组属性 - 不像下面的示例知道 PhoneNumber 将被更新
像这样:
MATCH (n:`User` {Id:'24d03ce7-8d23-4dc3-a13b-cffc0c7ce0d8'})
MERGE (n {PhoneNumber: '123-123-1234'})
RETURN n
上面代码的问题在于MERGE
重新定义了n
我得到这个错误:
n already declared (line 2, column 8) "MERGE (n {PhoneNumber: '123-123-1234'})" ^
如果您只想完全替换所有现有节点的属性,请不要使用
MERGE
。您应该只使用MATCH
和SET
所有属性。像这样:MATCH (n:`User` {Id:'24d03ce7-8d23-4dc3-a13b-cffc0c7ce0d8'}) SET n = {PhoneNumber: '123-123-1234', Age: 32} RETURN n;
另一方面,如果你想创建一个新的节点当且仅当具有指定
Id
的节点还不存在,并且你还想完全替换新节点或现有节点,您可以这样做:MERGE (n:`User` {Id:'24d03ce7-8d23-4dc3-a13b-cffc0c7ce0d8'}) SET n = {PhoneNumber: '123-123-1234', Age: 32} RETURN n;
注意:在上述查询中,n
的所有现有属性将在添加新属性之前被删除。此外,分配给 SET
子句中的 n
的映射可以作为参数传递给查询(因此不需要硬编码)。