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

时间:2016-09-27 22:10:32

标签: gremlin graph-traversal tinkerpop3

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

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

1个按钮,3个用户,每个用户有多个边缘,各种t_dates,红色按钮。只有一个红色按钮,但用户和互动将达数百万。我假设以按钮为起点是要走的路。所有属性都有正确的索引来支持范围查询等。

  1. 在日期A和B之间触摸按钮的用户数。
  2. 在日期Z和Y之间触摸按钮且在日期A和B
  3. 之间未触摸按钮的用户数
  4. 在日期A和B之间以及日期Z和Y之间触摸按钮的用户数。
  5. 谢谢!

1 个答案:

答案 0 :(得分:1)

  

在日期A和B之间触摸按钮的用户数。

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

在日期Z和Y之间触摸按钮并且在日期A和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()
  

在日期A和B之间以及日期Z和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()。我唯一担心的是&#34;用户和互动将达到数百万&#34;。您的模型不会缩放并且遍历数百万优势并且表现良好(如果有的话)。