javascript - 在 gremlin 中,如何查找和排序给定顶点所属的所有连接顶点的三元组?
问题描述
我正在制作一个用户可以成为朋友的社交应用程序。
对于给定的用户A
,我想找到所有的用户三合会这样A -isFriends-> B AND B -isFriends-> C AND C -isFriends-> A
。
我目前的做法如下:
g.V(A).repeat(__.out('isFriends')).times(3).path().by(id).toList()
然后在 gremlin 之外,我过滤掉所有 Path 对象,其中第一个对象与最后一个对象不同。我宁愿让 gremlin 为我做这个过滤,但我不确定如何根据path()
.
我试过cyclicPath()
了,但这只是返回一个顶点对象的平面列表,我不明白。由此,我希望有类似的输出,path()
但只包含第一个和最后一个顶点相同的路径。让我知道这个期望是否不正确。
然后我还想根据子遍历的结果(三个顶点有多少共同朋友)对这些路径进行排序,但我不确定如何从 的输出中包含的顶点开始运行遍历path()
,而不开始一个新的 gremlin 查询。
我正在使用 javascript-gremlin 驱动程序 (v3.4.4) 并对 AWS Neptune 进行查询,其中 lambdas 不可用。
如果我的方法或理解不正确,请告诉我。
解决方案
所以我尝试为您的问题创建一个示例图: 示例图
您正在尝试找到一个简单的循环路径,我认为您可以通过以下方式实现:
g.V().hasLabel('A').as('a')
.both('isFriends').as('b')
.both('isFriends').as('c')
.where(both('isFriends').hasLabel('A'))
.select('a', 'b', 'c')
注意:三元组是对称的,所以它们每个都会返回两次。
推荐阅读
- google-cloud-platform - 如何获取 bigquery 表的聚类信息
- ionic-framework - 如何在 Ionic 5 中为卡片添加向上/向下滑动行为
- apache-spark - 无法从 pyspark 的 cassandra 数据库加载信息
- python - 适合循环后如何保存sklearn模型
- php - 供应商/商店按类别分组产品 - laravel
- google-sheets - 有条件地格式化具有字体大小、边框、单元格大小和对齐方式的动态仪表板页面?
- clojure - 有没有办法将 clojure 规范转换为可读的 json 响应?
- firebase - 使用firebase在flutter中设置动态初始路由
- php - php cURL 从哪个国家/地区访问页面.. 用户或服务器
- r - 当我按它分组时,它为每个变量创建 2 行但我想要一个?