【发布时间】:2021-10-15 01:19:00
【问题描述】:
背景
我们正在尝试构建一个查询,以便对于给定的label,我们希望获取该label 类型的所有邻居的所有 id 列表。我们有大约 5 个不同的标签,因此我们正在构建一个遍历以在单个查询中完成所有操作。
目标
我们希望确保对于给定的 label,我们查询 N 个邻居,并且对于 idsToBatchQuery 列表中的所有聚合邻居,我们都对它们进行重复数据删除。
我们面临的问题是副作用只是对每个顶点进行重复数据删除。
例如 - 如果我们在 idsToBatchQuery 列表中有 10 个顶点并且每个顶点有 3 个邻居,我们只对这 3 个邻居进行重复数据删除,而不是对 30 个完整的邻居列表进行重复数据删除。
问题
我们如何修改以下查询以从idsToBatchQuery 中的所有顶点中获取第一个maxBreadth 唯一邻居?
var traversal = g.V(idsToBatchQuery.toArray())
for (String label : labels) {
traversal =
traversal.sideEffect(
outE(EDGE_LABEL)
.inV()
.hasLabel(label)
.dedup()
.by(T.id)
.limit(maxBreadth)
.aggregate(label));
}
【问题讨论】:
-
也许用
where(without(label))替换dedup -
我在下面添加了一个答案,显示了这种模式。