我试图弄清楚如何使用密码查询有效地添加新节点.我正在尝试合并多个数据源,因此需要查找可能的匹配数据.我有3个数据点,可能存在也可能不存在.如果任何数据点匹配,我想重用现有节点.如果没有数据点匹配,我想创建一个新节点.
如果节点不存在则创建节点是MERGE的确切用例.MERGE不允许WHERE子句,否则这将非常简单.由于我匹配数据点-OR数据点-b OR数据点-c,我无法弄清楚如何使用MERGE作为它的所有属性.
这是无效的,但应该表达我的目标:
MERGE (n:TYPE)
WHERE n.propertyA = "A" OR n.propertyB = "B" OR n.propertyC = "C"
ON MATCH SET n.propertyA = "A", n.propertyB = "B", n.propertyC = "C"
ON CREATE SET n.timestamp = <now>, n.propertyA = "A", n.propertyB = "B", n.propertyC = "C"
RETURN n;
Run Code Online (Sandbox Code Playgroud)
我以为我可以使用批处理或交易.我仍然感谢任何见解或指导,因为我仍在学习Cypher.
Sup*_*miu -2
我不知道我是否完全理解这个问题,但这应该对你有帮助:
根据Neo4j 的文档,如果节点不存在,则可以使用合并来创建节点,使用您指定的节点属性来了解该节点是否已存在。
事实上,您不需要WHERE此处的子句来匹配节点的属性。
所以这:
MERGE (n:TYPE)
WHERE n.propertyA = "A" OR n.propertyB = "B" OR n.propertyC = "C"
ON MATCH SET n.propertyA = "A", n.propertyB = "B", n.propertyC = "C"
ON CREATE SET n.timestamp = timestamp(), n.propertyA = "A", n.propertyB = "B", n.propertyC = "C"
RETURN n;
Run Code Online (Sandbox Code Playgroud)
正如你所说,这是错误的。几乎可以这样实现:
MERGE (n:TYPE {propertyA : "A"})
ON MATCH SET n.propertyA = "A", n.propertyB = "B", n.propertyC = "C"
ON CREATE SET n.timestamp = timestamp(), n.propertyA = "A", n.propertyB = "B", n.propertyC = "C"
RETURN n;
Run Code Online (Sandbox Code Playgroud)
如果我明白你到底想做什么,那是不可能的。因为MERGE要么匹配要么创建节点。您想使用 进行合并OR,但这是行不通的,因为您无法创建执行此操作的节点:
CREATE (a:Node) SET a.propertyA = "A" OR a.propertyB = "B"
为了做你想做的事情,我猜你必须将合并分成多个部分,但我不知道实际上如何,如果我找到如何编辑答案。
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |