【发布时间】:2019-04-12 00:29:12
【问题描述】:
我们正在尝试将具有特定标签(“概念”)的节点上的属性作为新标签传播到连接的节点(使用谓词“CONTAINS_OBJECT”),但正在努力将属性分配给查询中的变量.假设将有多个“概念”节点,假设没有“概念”节点与其他“概念”节点有重叠连接,如何做到这一点。
即以下情况永远不会发生,其中 n0 和 n1 不同:
(n0:Concept)-[:CONTAINS_OBJECT]->(o:Object)<-[:CONTAINS_OBJECT]-(n1:Concept)
基本上,Cypher 应该如何做到这一点?
免责声明:我们对 Cypher 还很陌生 - 感谢您提供任何和所有建议。
我们尝试了更多受限查询,但在变量分配中也遇到了问题。
此查询针对单个指定的“概念”节点实现了预期结果:
MATCH p = (c:Concept{ Name: 'Con0' })-[:CONTAINS_OBJECT]->(END)
FOREACH (n in nodes(p) | SET n:Con0)
以下查询是我们尝试将“概念”节点的“名称”属性绑定到变量”,但在此实例中未分配“p”:
MATCH p = (c:Concept{ Name: 'Con0' })-[:CONTAINS_OBJECT]->(END)
WITH c.Name as conceptName
FOREACH (n in nodes(p) | SET n:conceptName)
为了尽可能简化我们所追求的结果,最终结果是对于任何给定的“概念”节点,以下两个 MATCH 语句应该返回相同的结果:
1)
MATCH (c:Concept{ Name: 'Con0' })-[:CONTAINS_OBJECT]->(o:Object)
2)
MATCH (c:Concept{ Name: 'Con0' })-[:CONTAINS_OBJECT]->(o:Con0)
希望按照以下方式构建查询:
MATCH p = (c:Concept)-[:CONTAINS_OBJECT]->(END)
WITH c.Name as conceptName
FOREACH (n in nodes(p) | SET n:conceptName)
【问题讨论】: