【问题标题】:Trouble with correctly modeling data in Neo4j / Cypher在 Neo4j / Cypher 中正确建模数据的问题
【发布时间】:2021-10-13 06:59:15
【问题描述】:

我是 Neo4j/Cypher 的初学者,我无法正确建模我的数据。

数据有如下关系:

MANUFACTURER_A (unique) -> PRODUCT_A (unique just withing MANUFACTURER_A) -> CUSTOMER_A (globally unique)
MANUFACTURER_A (unique) -> PRODUCT_A (unique just withing MANUFACTURER_A) -> CUSTOMER_B (globally unique) 
MANUFACTURER_B (unique) -> PRODUCT_A (unique just withing MANUFACTURER_B) -> CUSTOMER_A (globally unique)

我无法使 Product_AManufacturer 中独一无二。我总是从Manufacturer_AProduct_A 得到一条线,从Manufacturer_B 得到另一条线,但我实际上想要两个Product_A 节点(每个Manufacturer 一个),但每个Manufacturer 只有一个Product_A 节点。

我尝试了以下方法:

CREATE CONSTRAINT ON (c:MANUFACTURER) ASSERT c.MANUFACTURER IS UNIQUE;
CREATE CONSTRAINT ON (c:CUSTOMER) ASSERT c.CUSTOMER IS UNIQUE;

LOAD CSV WITH HEADERS FROM
'file:///small.csv' AS line

WITH line LIMIT 20
MERGE (CUSTOMER:Customer {Name: line.CUSTOMER})
MERGE (MANUFACTURER:Manufacturer {Name:line.MANUFACTURER})
MERGE (PRODUCT:Product {Name: line.PRODUCT})

MERGE (MANUFACTURER)<-[:PRODUCES]-(PRODUCT)
MERGE (CUSTOMER)<-[:CONSUMES]-(PRODUCT)

;

如何正确建模?

【问题讨论】:

  • 请给我们一份file:///small.csv

标签: neo4j model cypher


【解决方案1】:

在这种情况下,您不想单独合并 :PRODUCT 节点,而是作为连接到合并的制造商变量的模式的一部分,它提供了您正在寻找的模式必须连接的上下文,如果不存在这样的模式,将创建未绑定的部分。

...
MERGE (MANUFACTURER:Manufacturer {Name:line.MANUFACTURER})
MERGE (MANUFACTURER)<-[:PRODUCES]-(PRODUCT:Product {Name: line.PRODUCT})
...

因此,该名称的产品是否存在于图表中的其他位置无关紧要,只要找不到与该制造商相关联的产品,它将作为 MERGE 的一部分创建。

这篇知识库文章也可能会有所帮助,因为它涵盖了这个应用程序等等:

https://neo4j.com/developer/kb/understanding-how-merge-works/

【讨论】:

  • 谢谢我试试看
猜你喜欢
  • 1970-01-01
  • 2020-10-06
  • 2015-02-23
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
相关资源
最近更新 更多