ArangoDB技术咨询:Foxx遍历配置中filter与expandFilter的区别
Foxx遍历中
filter与expandFilter的核心差异 嘿,这个问题问得特别好——很多刚上手Foxx遍历的开发者都会被这俩配置搞混,我来给你把核心差异拆解明白:
作用阶段完全不同
filter是在遍历到节点/边之后、将其加入结果集之前生效的过滤。简单说,它管的是「这个节点/边要不要出现在最终的遍历结果里」。expandFilter是在决定是否要从当前节点继续向下遍历(展开)之前生效的过滤。它管的是「要不要从这个节点出发,继续遍历它的邻接节点/边」。
影响范围天差地别
- 用
filter过滤掉某个节点,只会让这个节点不进入结果集,但如果它符合遍历规则的话,默认还是会继续展开它的邻接节点(除非你同时用expandFilter限制)。 - 用
expandFilter过滤掉某个节点,这个节点本身仍然可能出现在结果集里(如果没被filter排除的话),但它的邻接节点不会被遍历到——相当于在这个节点「截断」了遍历分支。
- 用
实际场景示例对比
拿社交关系图遍历举个例子:- 如果配置
filter: (node) => node.age >= 18,所有未成年用户不会出现在最终结果里,但他们的成年好友依然会被正常遍历出来。 - 如果配置
expandFilter: (node) => node.age >= 18,未成年用户会出现在结果里,但系统不会去遍历他们的好友列表,遍历到这类节点就会停止该分支的延伸。
- 如果配置
对结果集的逻辑影响不同
filter直接决定哪些节点/边能进入最终返回的数据集合;而expandFilter不直接修改结果集内容,只通过控制遍历的深度和广度范围,间接影响结果集的大小和内容。
内容的提问来源于stack exchange,提问作者Loredra L
相关产品推荐
相关产品推荐

