英文:
Need to group a Vertex by a Vertex which is saved as a property in that Vertex in Neptune DB using gremlin
问题
我有两个顶点 Workspace 和 Customer 在 Neptune 数据库中,Workspace 有 Customer 作为属性。这类似于在关系数据库中在 Workspace 中具有 Customer 作为外键。我想按照 Customer 的一个属性对 Workspace 进行分组。在 Workspace 中,Customer 保存为 Neptune 分配的唯一 id,键为 customer,值为该实体的唯一 id。
在下面的查询中,投影的 customer 基本上是 Workspace 顶点的属性,其值是 Customer 顶点的唯一 id,然后尝试按 Customer 顶点的 firstName 属性进行分组,最后按计数步骤进行分组。我不确定这是否正确的方法。请帮助我解决这个问题。
英文:
I have two vertices Workspace and Customer in Neptune DB and Workspace has Customer as property. It is like having foreign key as Customer in Workspace in RDBMS. I want to group Workspace by one of the Customer's property. In Workspace customer is saved with unique id given by Neptune with key as customer and value as unique id of that entity.
In the below query , projecting customer which is basically an attribute of Workspace vertex having value as unique id of Customer vertex and trying to group by firstName which is a property of Customer vertex and finally grouping by count step. I'm not sure if this is the way. Please help me with this.
g.V().hasLabel('Workspace').
has('customer').
project('entity').
by(values('customer')).
group().
by('entity.firstName').
by(count());
答案1
得分: 1
数据模型没有太多意义。在图中,不需要外键。相反,通常会在 Workspace 和 Customer 顶点之间有一条边。
(Workspace) <- [usedBy] - (Customer)
其中 'usedBy' 将是连接两者的边的类型(或标签)。如果按照这个模式,你可以执行查询如下:
g.V().hasLabel('Workspace').
group().by(
in('usedBy').values('entity.firstName'))
然后,如果你想要每个客户的工作空间总数,你可以在末尾添加 count()
,如下所示:
g.V().hasLabel('Workspace').
group().
by(in('usedBy').values('entity.firstName')).
by(count())
英文:
The data model doesn't make much sense. In a graph, there's no need for foreign keys. Instead, you would typically have an edge between the Workspace and Customer vertices.
(Workspace) <- [usedBy] - (Customer)
Where 'usedBy' would be the edge type (or label) of the edge connecting the two. If following that pattern, you could do a query such as:
g.V().hasLabel('Workspace').
group().by(
in('usedBy').values('entity.firstName'))
and then if you wanted the total count of workspaces per customer, you could then add count()
on to the end such that:
g.V().hasLabel('Workspace').
group().
by(in('usedBy').values('entity.firstName')).
by(count())
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论