在密码 Neo4j 中处理嵌套的可选数据



我正在编写一个密码,用于处理名为questions的可选数据。它背后的想法是创建一种关系,如下所示:

(dot:Dot)<-[:IS_ABOUT]-(q:Question)<-[:IS_ABOUT]-(a:Answer)

作为问题传入的数据,这是一个包含文本、答案和可选 guid 值的数组。此问题参数也可以是一个空数组,并且当新数据被添加到问题数组时,它们将不包含或具有 guid。

问题是当我运行查询时,它无法执行和运行,我也没有运气UNWIND,任何帮助将不胜感激!

如果问题和答案包含 guid,则它应匹配并更新值,但如果问题和答案不包含 guid,则应创建新节点。

WITH [
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a4ad55",
answer: [
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a74635",
correct: false
},
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a4ad22",
correct: false
},
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a4a987",
correct: false
}
]
},
{
text: "something",
answer: [
{
text: "something",
correct: false
},
{
text: "something",
correct: false
},
{
text: "something",
correct: false
}
]
}
] as questions
MATCH (d:Dot{GUID: "9a4aeac0-4ea4-469a-80c1-908573a4ad61"})
WITH d, questions
FOREACH (ignoreMe IN CASE WHEN questions IS NOT NULL THEN [1]
ELSE []
END |
FOREACH (question IN questions |
MERGE (q:Trivia:Question { GUID: question.guid })
ON CREATE SET q.GUID = apoc.create.uuid(), q.creationDate = datetime(), q.text = question.text
ON MATCH SET q.text = question.text
MERGE (q)-[g:IS_ABOUT]->(dot)
ON CREATE SET g.creationDate = datetime()
FOREACH (answer IN question.answer |
MERGE (a:Trivia:Answer { GUID: answer.guid })
ON CREATE SET a.GUID = apoc.create.uuid(), a.creationDate = datetime(), a.text = answer.text, a.
correct = answer.correct
ON MATCH SET  a.text = answer.text, a.correct = answer.correct
MERGE (a)-[t:TO]->(q)
ON CREATE SET t.creationDate = datetime()
)
)
)
RETURN d

[更新]

questions列表中的第二个元素缺少 Cypher 代码所需的所有guid属性。

下面是一个固定示例(提供所有预期的guid属性(:

WITH [
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a4ad55",
answer: [
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a74635",
correct: false
},
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a4ad22",
correct: false
},
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a4a987",
correct: false
}
]
},
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a4ad66",
answer: [
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a74611",
correct: false
},
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a74622",
correct: false
},
{
text: "something",
guid: "9a4aeac0-4ea4-469a-80c1-908573a74633",
correct: false
}
]
}
] as questions
MATCH (dot:Dot{GUID: "9a4aeac0-4ea4-469a-80c1-908573a4ad61"})
FOREACH (question IN questions |
MERGE (q:Trivia:Question { GUID: question.guid })
ON CREATE SET q.GUID = apoc.create.uuid(), q.creationDate = datetime(), q.text = question.text
ON MATCH SET q.text = question.text
MERGE (q)-[g:IS_ABOUT]->(dot)
ON CREATE SET g.creationDate = datetime()
FOREACH (answer IN question.answer |
MERGE (a:Trivia:Answer { GUID: answer.guid })
ON CREATE SET a.GUID = apoc.create.uuid(), a.creationDate = datetime(), a.text = answer.text, a.correct = answer.correct
ON MATCH SET  a.text = answer.text, a.correct = answer.correct
MERGE (a)-[t:TO]->(q)
ON CREATE SET t.creationDate = datetime()
)
)
RETURN dot

最新更新