如何查询具有多条边的顶点

How to query for vertices with multiple edges

查询以下内容的最佳方式是什么:

(V:Button {color: 'red'})<-[E:Touched {t_date: date}]-(V:User)

1个按钮,3个用户,每个用户有多个边,有各种t_dates,到红色按钮。只有 1 个红色按钮,但用户和交互将以数百万计。我假设以按钮为起点是可行的方法。所有属性都有正确的索引以支持范围查询等

  1. 在日期 A 和 B 之间触摸按钮的用户数。
  2. 在日期 Z 和 Y 之间触摸按钮并且在日期 A 和 B 之间没有触摸按钮的用户数
  3. 在日期 A 和 B 之间以及日期 Z 和 Y 之间触摸按钮的用户数。

谢谢!

Count of users who touched button between date A and B.

g.V().has("Button", "color", "red").
  inE("Touched").has("t_date", between(A, B)).outV().dedup().count()

Count of users who touched button between date Z and Y AND didn't touch it between date A and B

g.V().has("Button", "color", "red").as("b").
  sideEffect(inE("Touched").has("t_date", between(A, B)).inV().aggregate("x")).
  inE("Touched").has("t_date", between(Y, Z)).inV().where(without("x")).dedup().count()

Count of users who touched button between date A and B AND also between date Z and Y.

g.V().has("Button", "color", "red").as("b").
  sideEffect(inE("Touched").has("t_date", between(A, B)).inV().aggregate("x")).
  inE("Touched").has("t_date", between(Y, Z)).inV().where(within("x")).dedup().count()

如果用户和按钮之间只能有一条边,您可以删除 dedup()。我唯一担心的是 "users and interactions will be in millions"。您的模型将无法扩展并且遍历数百万条边将不会表现良好(如果有的话)。