首页 > 解决方案 > 涉及边缘属性数量检查的 gremlin 查询

问题描述

我有图形数据库的这个模式。

对于X ,我需要找到从它所连接picked的所有标签进行呼叫的用户。callsprogram

我对小精灵很陌生,我的词汇量有限。

我想找到一种方法来检查用户的传入边picked == yes数是否与给定 X 的用户传入边的总数相同program。(也就是说,如果从程序 X 通过调用到用户的每条边都包含挑选==是的)

我无法在同一个查询中计算两次并比较这些值以确定用户是否满足条件。我的方法如下:

g.V().hasLabel("User").filter(inE().count().is(neq(0))).filter(inE().outV().in().has("program","name","X")).filter(inE().has("connected","yes").has("picked","no").count().is(eq(0))).values("name")

本质上,我删除了所有我知道不会导致我预期结果的情况(用户中的空节点,连接但未接听的用户)。当我根据手动检查结果对其进行测试时,这不会产生正确的输出。

谢谢!

标签: graph-databasesgremlintraversal

解决方案


仅从描述中,我会说这是您的查询:

g.V().hasLabel('User').
  filter(project('a','b').
           by(inE().has('picked','yes').count()).
           by(out().has('program','X').count()).
         where('a',eq('b')))

如果这没有返回预期结果,那么请提供一个片段,该片段创建一个小样本图以及预期结果。


推荐阅读