在 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'})
之类的节点设置参数中的所有属性?有什么方法可以将 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', 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
大小写约定,而不是 UPPERCASE
(UPPERCASE
是关系类型的约定大小写)。
我对以下查询有语法问题,我认为不可能这样做:
添加换行符以提高可读性,它们不在实际查询中。
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', 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
大小写约定,而不是 UPPERCASE
(UPPERCASE
是关系类型的约定大小写)。