微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Cypher 中使用 CREATE、SET 和添加关系

如何解决在 Cypher 中使用 CREATE、SET 和添加关系

我有以下查询的语法问题,我认为不可能这样做:

为可读性添加换行符,它们不在实际查询中。

CREATE (a:USER:TTL {mail: 'a@b.de',fullName: 'example',password: 'spgjwetpjsfj32523rmdcp23r'})
SET a += {
    createdAt : datetime.transaction('Europe/Berlin'),ttl : timestamp() + 172800000,confirmHash: 697159094 }
-[:HAS_FirsT_ADDRESS]->
(address:ADDRESS:TTL {
    addressstreet: 'ab',addressAddition: 'zusatz',addressCityCode: 12334,addressCity: 'city'})
SET address.createdAt = datetime.transaction('Europe/Berlin'),address.ttl = timestamp() + 172800000
RETURN a

这给了我一个错误

Invalid input ':': expected whitespace,a variable,RelationshipsPattern,an expression or ']'

我想我不能连续使用 CREATE (a) SET a+= {prop: 'a'} -[:REL]-> (b) SET b.name = 'ab' RETURN a,因为当我省略第一个 SET 部分用户的部分)时,查询运行良好。

我是否需要在参数中为 (a {prop: 'a'}) 等节点设置所有属性?有没有办法将 CREATESET 结合起来并添加关系?

我使用的是 Neo4J 4.2.2。

解决方法

您可以这样重写您的查询:

CREATE (a:USER:TTL {
    mail: 'a@b.de',fullName: 'example',password: 'spgjwetpjsfj32523rmdcp23r',createdAt : datetime.transaction('Europe/Berlin'),ttl : timestamp() + 172800000,confirmHash: 697159094
})-[:HAS_FIRST_ADDRESS]->(address:ADDRESS:TTL {
    addressStreet: 'ab',addressAddition: 'zusatz',addressCityCode: 12334,addressCity: 'city',createdAt: datetime.transaction('Europe/Berlin'),ttl: timestamp() + 172800000})
RETURN a

如果您真的需要那些 SET 子句,请记住 SET 只能用于设置属性和标签,而不能用于设置与节点的关系。 您需要 CREATE(或 MERGE)来创建两个节点之间的关系。

CREATE (a:USER:TTL {mail: 'a@b.de',password: 'spgjwetpjsfj32523rmdcp23r'})
SET a += {
    createdAt : datetime.transaction('Europe/Berlin'),confirmHash: 697159094 }
CREATE (address:ADDRESS:TTL {
    addressStreet: 'ab',addressCity: 'city'})
SET address.createdAt = datetime.transaction('Europe/Berlin'),address.ttl = timestamp() + 172800000
CREATE (a)-[:HAS_FIRST_ADDRESS]->(address)
RETURN a

旁注:标签通常遵循 PascalCase 大小写惯例,而不是 UPPERCASEUPPERCASE 是关系类型的惯例大小写)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。