Neo.ClientError.Statement.SyntaxError:无效输入‘):预期空格或关系模式(第66行,第100列(偏移号:1898年))“创建(z:订阅{ subscriptionId: subs.subscriptionId,startDate: subs.startDate,endDate:’})<-r:ASSOCIATION-(y:Person {nationalIdentityNumber: subs.nationalIdentityNumber,name: subs.name,姓氏: subs.surname,父名: subs.fathername,国籍: subs.nationality,passportNo: subs.passportNo,生日: subs.birthdate})”
我希望创建/合并节点和类型为人员、订阅和行的关系
如果我有相同的订阅,我应该检查到startDate,如果新数据的开始日期大于旧数据;我应该创建新订阅,并更改旧订阅的结束日期。
UNWIND [{
msisdn:'99658321564',
name:'Lady',
surname:'Camble',
fatherName:'Aeron',
nationality:'EN',
passportNo:'PN-1234224',
birthDate:'12-05-1979',
nationalIdentityNumber:'112124224',
subscriptionId:'2009201999658321564',
startDate:'20-09-2019 12:00:12'
},{msisdn:'99658363275',
name:'John',
surname:'Mckeen',
fatherName:'Frank',
nationality:'EN',
passportNo:'PN-126587',
birthDate:'15-08-1998',
nationalIdentityNumber:'2548746542',
subscriptionId:'1506201999658363275',
startDate:'15-06-2019 13:00:12'}
{
msisdn:'99658321564',
name:'Lady',
surname:'Camble',
fatherName:'Aeron',
nationality:'EN',
passportNo:'PN-1234224',
birthDate:'12-05-1979',
nationalIdentityNumber:'112124224',
subscriptionId:'2009201999658321564',
startDate:'31-11-2019 12:00:12'
}
] as subs
MERGE (y:Person {nationalIdentityNumber: subs.nationalIdentityNumber, name: subs.name, surname: subs.surname, fathername: subs.fathername , nationality: subs.nationality, passportNo: subs.passportNo, birthdate: subs.birthdate })
MERGE (t:Subscription{subscriptionId:subs.subscriptionId })
MERGE (y)-[rel:ASSOCIATION]-(t)
ON MATCH SET
t.endDate = (case when t.startDate <subs.startDate then subs.startDate else ''
end)
MATCH (t:Subscription) where t.subscriprionId=subs.subscriprionId and
(CASE
WHEN t.endDate=subs.startDate then
CREATE (z:Subscription{ subscriptionId: subs.subscriptionId, startDate: subs.startDate, endDate:''})-[r:ASSOCIATION]-(y:Person {nationalIdentityNumber: subs.nationalIdentityNumber, name: subs.name, surname: subs.surname, fathername: subs.fathername , nationality: subs.nationality, passportNo: subs.passportNo, birthdate: subs.birthdate})
END)
RETURN y发布于 2019-10-31 13:37:56
UNWIND[...] as subs
MERGE (y:Person {nationalIdentityNumber: subs.nationalIdentityNumber, name: subs.name, surname: subs.surname, fatherName: subs.fatherName , nationality: subs.nationality, passportNo: subs.passportNo, birthDate: subs.birthDate })
MERGE (t:Subscription{subscriptionId:subs.subscriptionId,startDate:subs.startDate,endDate:''})
MERGE (y)-[rel:ASSOCIATION]-(t)
MERGE(x:Subscription{subscriptionId:subs.subscriptionId, endDate:''})
SET
x.endDate = (case when x.startDate < subs.startDate then subs.startDate else null end);CQL应该喜欢这个。谢谢我的同事。
发布于 2019-10-31 16:43:53
您试图通过CASE语句获得条件Cypher子句,但这是行不通的。在这种情况下,不能执行嵌套CREATE (或任何其他Cypher子句)。
但是,您可以使用FOREACH与CASE的技巧来模拟if条件。这在您的情况下应该有效,因为您只想在特定的条件下执行一个创建(虽然您已经为这个人匹配了y节点,所以只需在该创建中重用(y),而不是试图从标签和属性中再次定义整个节点,这将无法正常工作)。
如果您需要更高级的条件逻辑,可以通过APOC程序中的条件过程获得
https://stackoverflow.com/questions/58638724
复制相似问题