我正在Neo4j中使用UNWIND和Foreach进行Cypher查询,我确定有bug,但我不知道我错在哪里。
我正在构建一个跟踪中包含三个跨度的图,如下所示(在“test.json”中)
[
{
"spanId":"3",
"name": "checkOut",
"parentId": ["1"],
"service_name": "svc"
},
{
"spanId":"2",
"name": "addCart",
"parentId": ["1"],
"service_name": "svc"
},
{
"spanId":"1",
"name": "frontend",
"service_name": "svc"
}
]
Span checkOut
和addCart
是front
的子级,因此frontend -> checkOut
和frontend -> addCart
之间存在父子关系。
同时,这些span都属于“svc”服务,所以它们应该与“svc”有关系,但是frontend
遗漏了与“svc”的关系,如下所示
我的Cypher查询如下:
WITH 'file:///test.json' AS url
CALL apoc.load.json(url) YIELD value
MERGE (s:Span {span_id: value.spanId})
ON CREATE SET s.name=value.name, s.service=value.service_name
WITH s, value
UNWIND value.parentId AS parent
MERGE (p:Span {span_id: parent})
MERGE (p)-[:PARENT_OF]->(s)
WITH s, value, value.service_name AS ki
FOREACH(k IN ki |
MERGE (svc:Service{service: value.service_name} )
MERGE (s)-[:FROM_SERVICE]->(svc)
)
有人能帮我看看我在Cypher查询中做错了什么吗?非常感谢!
1条答案
按热度按时间shyt4zoc1#
问题是在
UNWIND
语句中,您的frontend
对象没有parentId
数组,因此在创建与服务的关系之前,没有任何东西可以展开,并且对象会丢失。要解决这个问题,您应该将与服务的关系的创建和合并移动到UNWIND
之上。尝试以下操作: