【问题标题】:How to query for vertices with multiple edges如何查询具有多条边的顶点
【发布时间】:2016-09-27 22:10:31
【问题描述】:

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

(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 之间触摸按钮的用户计数。

谢谢!

【问题讨论】:

    标签: gremlin graph-traversal tinkerpop3


    【解决方案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()。我唯一担心的是“用户和交互将达到数百万”。您的模型无法扩展,并且遍历数百万条边的性能不会很好(如果有的话)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 2019-11-25
      • 2018-02-11
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      相关资源
      最近更新 更多