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

bha*_*y29 1 neo4j cypher

我试图在零售商和零售商销售的产品之间建立关系。例如,如果商店“xyz”销售产品 item1、item2 和 item3,我想在它们之间创建从商店到产品的关系“SELLS_PRODUCTS”。

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

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

cyb*_*sam 5

假设每个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});
Run Code Online (Sandbox Code Playgroud)

然后,此查询将确保“Prestige Liquor Store”与其销售的SELLS每个Products(在 DB 中)具有唯一关系:

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

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