Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 如何编写密码查询来创建超边?_Neo4j_Cypher - Fatal编程技术网

Neo4j 如何编写密码查询来创建超边?

Neo4j 如何编写密码查询来创建超边?,neo4j,cypher,Neo4j,Cypher,我有一张包含报价和客户的图表。一个客户可以与另一个客户共享一个产品,因此当这种情况发生时,我会创建一个hyperedge (CustomerA)-[:共享\u优惠]->(新节点) (newNode)-[:FOR_OFFER]->(OFFER) (newNode)-[:与]->(客户共享)(这可能是许多客户) 现在,如果另一个客户B与其他客户共享相同的报价,我希望创建一个新节点来表示这种关系。 有没有办法在一个密码查询中完成这一切 我正在使用: start c=node:node_auto_ind

我有一张包含报价和客户的图表。一个客户可以与另一个客户共享一个产品,因此当这种情况发生时,我会创建一个hyperedge

(CustomerA)-[:共享\u优惠]->(新节点)

(newNode)-[:FOR_OFFER]->(OFFER)

(newNode)-[:与]->(客户共享)(这可能是许多客户)

现在,如果另一个客户B与其他客户共享相同的报价,我希望创建一个新节点来表示这种关系。 有没有办法在一个密码查询中完成这一切

我正在使用:

start c=node:node_auto_index(name="C1"), o=node:node_auto_index(name="Offer"), sharedCustomer=node:node_auto_index(name="C2")
create unique c-[:SHARED_OFFER]->(sharedOffer)-[:FOR_OFFER]->(o), (sharedOffer)-[:SHARED_WITH]->(sharedCustomer)
这是第一次有效。请参阅控制台: 当C1与C2共享报价时,此查询正确创建了关系

当C2现在与C3共享时,执行查询会导致重复使用同一个节点——这不是我想要的。应该有一个从C2创建的新节点,该节点具有共享的_OFFER关系。以下是查询:

start c=node:node_auto_index(name="C2"), o=node:node_auto_index(name="Offer"), sharedCustomer=node:node_auto_index(name="C3")
create unique c-[:SHARED_OFFER]->(sharedOffer)-[:FOR_OFFER]->(o), (sharedOffer)-[:SHARED_WITH]->(sharedCustomer)
感谢您的帮助。
注意:我使用的是1.8.1 REST,因此尝试一次性完成,而不是部分完成。

只是不使用
create unique
,只使用
create
。但请记住,首先在start子句中指定路径中的所有节点,并始终保持param
sharedOffer
未指定,以便create命令将仅创建未指定的元素

更新使用
创建
而不是
创建唯一的
,并对现有关系进行筛选(或使用两个查询-一个用于检查是否已存在具有C1的sharedOffer,另一个用于更新具有C3的sharedOffer):


如果我使用justcreate,那么C2与C3的共享就像预期的那样工作。但是,现在对C1和C3执行相同的创建操作,并创建一个新的共享报价节点,而不是重复使用第一个C1->C2共享中的节点。这就是为什么我最终得到了unique:-)另外--你能澄清一下你不指定sharedOffer是什么意思吗?我没有尝试过过滤器-这是一个有趣的想法。上述查询满足某些情况,但不幸的是,并非所有情况都满足。类似于如果C1已经与C2共享了O1,那么与C3共享O1的C1应该重用现有的共享提供,并且只创建到C3节点的共享提供。试图在一个查询中满足所有这些要求是很困难的,因此将其发布在这里。将尝试使用一些过滤器,否则将其分为两个查询。谢谢
START c=node:node_auto_index(name="C1"), o=node:node_auto_index(name="Offer"), sharedCustomer=node:node_auto_index(name="C2")
WHERE not(c-[:SHARED_OFFER]->(sharedOffer)-[:FOR_OFFER]->(o))
CREATE c-[:SHARED_OFFER]->(sharedOffer)-[:FOR_OFFER]->(o), (sharedOffer)-[:SHARED_WITH]->(sharedCustomer)