如何使用cypher查询语言在neo4j中创建一对多的关系

时间:2018-04-03 07:19:06

标签: neo4j cypher

我正在努力建立零售商和零售商销售的产品之间的关系。例如,如果商店“xyz”销售商品item1,item2和item3,我想在商店和商品之间创建一个“SELLS_PRODUCTS”关系。

这是我的示例代码: 零售商在这里是零售商表,而Products是另一个表,其中包含关系所需的产品名称,商店名称等常见详细信息。

MATCH (r:Retailers{Name: "Prestige Liquor Store"})
WITH r
MATCH (p:Products)
WHERE r.ProductproductName = p.ProductName
CREATE UNIQUE (r)-[:SELLS_PRODUCTS]->(p)

1 个答案:

答案 0 :(得分:2)

假设每个Retailer节点包含productNames列表,并且每个Product节点都有name。例如:

CREATE (:Retailer {name: 'Prestige Liquor Store', productNames: ['a', 'b', 'c']})
CREATE (:Product {name: 'b', price: 12.50}),
       (:Product {name: 'c', price: 99.95});

然后这个查询将确保" Prestige Liquor Store"与其销售的每个SELLS(在数据库中)之间具有唯一的Product关系:

MATCH (r:Retailer {name: "Prestige Liquor Store"})
MATCH (p:Product)
WHERE p.name IN r.productNames
MERGE (r)-[:SELLS]->(p);

此外,如果您为:Retailer(name)Product(name)创建索引,如果有许多零售商和/或产品,这应该可以大大加快上述查询。