如何解决在 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'})
等节点设置所有属性?有没有办法将 CREATE
与 SET
结合起来并添加关系?
我使用的是 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
大小写惯例,而不是 UPPERCASE
(UPPERCASE
是关系类型的惯例大小写)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。