Neo4j 在子句期间从节点指定特定的模式
我有节点:Neo4j 在子句期间从节点指定特定的模式,neo4j,Neo4j,我有节点:(a:charlie),(b:economy),和(c:bicycle)。我要创建此模式: create (a:charlie)-[x:wants_make]->(b:economy)->[y:by_using]->(c:bicycle) 但它给了我笛卡尔积。我已经想过跳过创建节点(b)给关系[x:want\u make]一个属性。但是节点(b)在同一上下文(经济上下文)中有许多其他关系。我想要得到的是上面的图案 有什么建议吗?您可能需要对您的查询进行一些细分: M
(a:charlie)
,(b:economy)
,和(c:bicycle)
。我要创建此模式:
create (a:charlie)-[x:wants_make]->(b:economy)->[y:by_using]->(c:bicycle)
但它给了我笛卡尔积。我已经想过跳过创建节点(b)
给关系[x:want\u make]
一个属性。但是节点(b)
在同一上下文(经济上下文)中有许多其他关系。我想要得到的是上面的图案
有什么建议吗?您可能需要对您的查询进行一些细分:
MATCH (a:charlie), (b:economy), (c:bicycle)
MERGE (a)-[:wants_make]->(b), (b)->[:by_using]->(c)
MATCH (a:charlie), (b:economy), (c:bicycle)
MERGE (a)-[:wants_make]->(b)-[:by_using]->(c);
MERGE (a:Person {name: 'Charlie Brown'})
MERGE (c:Bicycle {id: 123})
MERGE (a)-[:wants_make]->(b:Economy)
MERGE (b)-[:by_using]->(c);
然后它说的是这两件事:
- 在每个
节点和每个charlie
节点之间创建economy
关系wants\u-make
- 使用每个
经济
节点和每个
自行车
节点之间的关系创建
因此,如果
charlie
、economy
和bicycle
节点的数量是C、E和B——这将导致(C*E*B)合并,这是笛卡尔积的笛卡尔积
此外,您的数据模型似乎是错误的。例如,使用Person
标签而不是charlie
标签似乎更合理MATCH (a:charlie), (b:economy), (c:bicycle)
MERGE (a)-[:wants_make]->(b)-[:by_using]->(c);
MERGE (a:Person {name: 'Charlie Brown'})
MERGE (c:Bicycle {id: 123})
MERGE (a)-[:wants_make]->(b:Economy)
MERGE (b)-[:by_using]->(c);
此查询通过更具体地描述路径中的第一个和最后一个节点来避免笛卡尔积,并且还避免创建已经存在的节点和关系想要
、经济性
和组合成一个节约关系:
MERGE (a:Person {name: 'Charlie Brown'})
MERGE (c:Bicycle {id: 123})
MERGE (a)-[:economizes_by_using]->(c);
我希望通过节点b将节点a与节点c关联起来,因为节点b是一个非常重要的节点,与许多其他节点关联,并带有
:economy
标签,不能作为属性。提到的节点是唯一的,因此可能该子句不太具体,;我会尝试通过他们的ID来匹配他们。您的第3点将节点a
和c
排除在b:economy
之外。虽然看起来更符合逻辑,但它跳过了图形方案中的一个重要节点(节点b
)。这就是为什么我不能这么做。