如何在Apache TinkerPop Gremlin中查询属性基数及判断类型?
在Apache TinkerPop Gremlin中查询属性基数的方法
一、基于Schema的查询(适用于有预定义Schema的图系统)
如果你的图系统(如JanusGraph、Neo4j)支持Schema定义,可直接通过Schema API查询属性的基数:
// 查询名为"email"的属性的基数 graph.schema().properties('email').cardinality()
执行后会返回Cardinality.SINGLE或Cardinality.SET这类枚举值,直接对应属性的基数类型。
二、通用查询方式(兼容所有Gremlin兼容图系统)
无论图是否有Schema,都可以通过获取属性实例的元数据判断基数:
- 获取单个属性实例并查询基数:
// 获取某个顶点上"email"属性的基数 g.V().hasLabel('person').has('email').limit(1).properties('email').next().cardinality()
- 判断属性基数是否为SET/SINGLE:
// 判断是否为SET基数 g.V().hasLabel('person').has('email').limit(1).properties('email').next().cardinality() == Cardinality.SET // 判断是否为SINGLE基数 g.V().hasLabel('person').has('age').limit(1).properties('age').next().cardinality() == Cardinality.SINGLE
注意事项
- 对于无Schema的图系统(如TinkerGraph),属性的基数在添加时指定(默认是
SINGLE),同一属性在不同顶点上可能存在不同基数(这种场景较少见),若要全局确认,需遍历所有包含该属性的顶点检查。 - 添加不同基数属性的示例:
// 添加SET基数的属性(允许多个值) g.V(1).property(Cardinality.SET, 'email', 'a@example.com').property(Cardinality.SET, 'email', 'b@example.com') // 添加SINGLE基数的属性(仅保留最新值) g.V(1).property(Cardinality.SINGLE, 'age', 30)
内容的提问来源于stack exchange,提问作者Thirumal
相关产品推荐
相关产品推荐

