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

Use CREATE, SET and add a relationship in Cypher

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

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

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', fullName: 'example', password: 'spgjwetpjsfj32523rmdcp23r'})
SET a += {
    createdAt : datetime.transaction('Europe/Berlin'),
    ttl : timestamp() + 172800000,
    confirmHash: 697159094 }
CREATE (address:ADDRESS:TTL {
    addressStreet: 'ab', addressAddition: 'zusatz', addressCityCode: 12334, addressCity: 'city'})
SET address.createdAt = datetime.transaction('Europe/Berlin'), address.ttl = timestamp() + 172800000
CREATE (a)-[:HAS_FIRST_ADDRESS]->(address)
RETURN a

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