我是Neo4j的新手,试图了解如何处理多维度的聚合。 例如,我有一个人 - 当他获得任务时,他会将产品交付到不同的城市。我将节点作为人员,产品和城市,并在它们之间建立关系(已交付产品和已交付产品)。我的数据如下所示
P1 - [delivered Products A1, A2 ] - [to City C1]
P1 - [delivered Products A1 ] - [to City C2]
P1 - [delivered Products A1, A2] - [to City C2]
我的图表dbP1中存储了如下所示的聚合 - 交付3次产品A1
P1 - delivered 2 times Product A2
P1 - delivered 1 time to city C1
P1 - delivered 2 times to city C2
附图显示了上述连接。
现在我想知道P1人将产品A1送到城市C2的次数 [P1-A1-C2]或人P1将产品A1交付给城市C1 [P1-A1-C1]的次数 尝试使用产品和城市维度查看数据。
我们在Graph数据库中是否有任何设计模式来处理多维度的此类聚合,或者我们是否需要先将上述组合与图表数据库中的聚合一起存储?
答案 0 :(得分:0)
我认为这里的主要问题是你的模型。由于您的图表中包含(Person)-[:DELIVERED]->(:Product)-[:TO]->(:City)
这样的模型,因此无法知道哪些交付是针对特定城市的。 [DELIVERED {times : 3}]
和:Person
之间的关系:Product
无法帮助回答您向数据库提出的问题。
一种有用的好方法是在模型中添加一个名为:Delivery
的新节点类型。这样您的图形将如下所示:
(:Person)-[:MADE]->(:Delivery)
(:Delivery)-[:TO]->(:City)
(:Delivery)-[:PRODUCT]->(:Product)
正如您所看到的,节点:Delivery
与:Person
,:City
和:Product
现在我想知道P1人将产品A1送到的次数 城市C2 [P1-A1-C2]或人P1交付产品A1的次数 城市C1 [P1-A1-C1]尝试使用产品和城市查看数据 尺寸。
我相信此查询将根据建议的模型回答您的问题:
MATCH (:Person {id:'P1'})-[:MADE]->(d:Delivery)-[:PRODUCT]->(:Product {id:'A1'}),
(d)-[:TO]->(:City {id:'C1'})
RETURN count(d)