【问题标题】:Gremlin: Generate a list by location of counts for active versus inactive usersGremlin:按活跃用户和非活跃用户的计数位置生成列表
【发布时间】:2019-03-22 15:03:21
【问题描述】:

我有顶点人员、用户类型和位置。人们具有传出边 people_location 和 people_usertype。 People 具有属性“名称”,用户类型具有属性“activationStatus”,位置具有属性“名称”。

我想创建一个如下所示的列表:

[[1]:https://i.stack.imgur.com/lKzZL.png]

我想要按位置统计activationStatus“活动”和“非活动”的人数,其中该位置包含“美国”。

这就是我所拥有的仅用于按位置“名称”以美国开头的位置计算人数:

g.V()hasLabel('people').out('people_publicisofficelocation')
.filter(has('name',between('US','UT')))
.groupCount().by('name')

它正在运行,但没有产生结果。

【问题讨论】:

  • 您是否有任何代码可以表明您已尝试解决此问题?
  • 我用我能想到的所有内容更新了这个问题(我对 gremlin 很陌生)
  • 只是指出显而易见的:UK 不是US。
  • 在向 Gremlin 提问时最好提供一个示例数据脚本,以便您获得经过全面测试的答案 - 这是一个示例 stackoverflow.com/questions/51388315/…
  • Daniel- 是的,你是对的,我的错,但是我确实在 US 上运行了相同的代码,但它不起作用。我基本上只需要能够按我想要的方式进行过滤

标签: orientdb gremlin


【解决方案1】:

您可以使用 has('name',between('US','UT')) 之类的东西在 TinkerPop 3.4 之前的版本中模拟“开始于”行为,因此您可以用它替换上面的过滤器行。如果您使用的图形实现支持 TinkerPop 3.4,那么您可以使用额外的文本谓词来表示开头、结尾和包含。

正如其他人所说,如果您可以发布一些示例 addV() 和 addE() 步骤来构建您的图表的一部分,那么给出更准确的答案会更容易。

【讨论】:

  • 嗨,Kelvin,这行得通!谢谢。不幸的是,我无权访问 addV() 和 addE() 步骤。我的描述不清楚吗?
  • 很高兴它成功了。如果您能接受答案,那就太好了,以便其他人可以看到答案。非常感谢。只是询问addV() 和addE(),以防您有更多问题。干杯。
【解决方案2】:

这对我有用!

g.V().hasLabel('Location').filter(has('name',between('US','UT'))) .project('Name','Active', 'Inactive', 'Total')  .by('name')  .by(__.both('people_location').out('people_usertype') .where(values('activationStatus').is(eq('Active'))).count())  .by(__.both('people_location').out('people_usertype') .where(values('activationStatus').is(eq('Inactive'))).count())  .by(__.both('people_location').out('people_usertype').count())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    相关资源
    最近更新 更多