在TinkerPop Gremlin中如何查询集合属性为输入集合子集的顶点?
基于Gremlin的Set属性子集匹配查询方案
场景说明
- 图顶点包含Set类型属性
foo,需要筛选所有foo属性集合是给定输入集合子集的顶点 - 示例顶点创建语句:
g.addV('v').property('foo', 'bar').property('foo','baz') - 匹配规则:
- 输入参数为
["bar", "quux", "quuz"]时,顶点foo属性包含不在输入集合的baz,不符合子集要求,无返回结果 - 输入参数为
["bar", "quux", "quuz", "baz"]时,顶点foo属性["bar", "baz"]完全属于输入集合,符合要求,顶点被返回
- 输入参数为
可用查询语句
将语句中的inputSet替换为你实际的输入集合即可:
g.V().hasLabel('v') .has('foo') // 过滤掉无foo属性的顶点,不需要可删除 .not( values('foo').is(without(inputSet)) )
逻辑解释
上述语句是标准TinkerPop Gremlin语法,全量图数据库兼容:
has('foo')用于提前过滤没有foo属性的顶点,如果你需要保留foo为空集合的顶点(空集属于任意集合的子集),可以删除这行过滤条件not(values('foo').is(without(inputSet)))是核心逻辑:表示不存在任何一个foo属性值不在输入集合中,等价于顶点foo的所有值都属于输入集合,即foo集合是输入集合的子集
内容的提问来源于stack exchange,提问作者zeevo
相关产品推荐
相关产品推荐

