Neo4j-如何处理多维聚合
我是Neo4j的新手,尝试了解如何处理多维聚合。 例如,我有一个人,当他接到任务时,他会把产品送到不同的城市。我有个人、产品和城市等节点,它们之间有关系(交付产品和交付对象)。我的数据如下Neo4j-如何处理多维聚合,neo4j,cypher,Neo4j,Cypher,我是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
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向C2市交付产品A1的次数[P1-A1-C2]或P1向城市C1交付产品A1的次数[P1-A1-C1] 尝试使用产品和城市维度查看数据
我们在Graph db中是否有任何设计模式来处理多维聚合类型,或者我们是否需要将上述组合与聚合一起存储在Graph db中?我相信这里的主要问题是您的模型。由于您有一个带有类似于
(Person)-[:DELIVERED]->(:Product)-[:TO]->(:City)
的模型的图形,因此无法知道哪些交付是到特定城市的。:Person
和:Product
之间的关系[DELIVERED{times:3}]
(例如)无助于回答您向数据库提出的问题
帮助您的一个好方法是在模型中添加一个名为: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)
谢谢布鲁诺。但我想知道,如果我每天都有成千上万的交付,我会将完整的信息像事务数据一样再次存储在Graph db中。数据将呈指数级增长。我试图将我的Graph db视为聚合数据库,其中我希望每月查看一次,有多少产品A1交付给城市C1等。在我的实时数据中,我将有多个维度用于此交付。您好。我相信我能帮你。谢谢布鲁诺。。这是了解图形版本控制的非常好的链接。这里也。。数据未存储在销售id级别。。而且对销售来说只有一个维度“产品”。