has条件过滤
在Gremlin语句中,有一大类是 filter 类型,就是对输入的对象进行条件判断,只有满足过滤条件的对象才可以通过 filter 进入下一步。
has语句是filter类型语句的代表,能够以顶点和边的属性作为过滤条件,决定哪些对象可以通过
hasLabel(labels)
Step hasLabel(labels)
:object的label和 指定的labels列表中任何一个匹配就可以通过
示例:
// 获取label="person"或者label="software"的顶点
g.V().hasLabel("person","software")
hasId(ids)
Step hasId(ids)
:object的id 和指定的ids列表中的任何一个匹配就可以通过
示例:
// 获取id为"okram"或"dalaro"或"javeme"的顶点
g.V().hasId("okram","dalaro","javeme")
has(key, value)
Step has(key, value)
:包含属性”key=value”的object通过,作用于顶点或者边
在HugeGraph中,按照property的值查询之前,应该对property建立索引,否则将无法查到结果并引发异常。(有两个例外:Vertex的PrimaryKeys和Edge的SortKeys)。
创建索引:
// 对"person"的"addr"属性建立secondary索引,可以对Text类型property按值进行查询
graph.schema().indexLabel('personByCity').onV('person').by('addr').secondary().ifNotExist().create()
// 对"person"的"age"属性建立range索引,可以对Number类型property进行范围查询
graph.schema().indexLabel('personByAge').onV('person').by('age').range().ifNotExist().create()
has过滤示例:
// 获取 age=29 的顶点
g.V().has('age', 29)
// 获取 addr=Beijing 的顶点
g.V().has('addr', 'Beijing')
has(label, key, value)
Step has(label, key, value)
:通过label和属性的名字和值过滤顶点和边
示例:
// 获取 label="person" 且 addr="Beijing" 的顶点
g.V().has('person', 'addr', 'Beijing')
has(key, predicate)
Step has(key, predicate)
:通过对指定属性用条件过滤顶点和边
示例:
// 获取 age > 20 的顶点
g.V().has('age', gt(20))
hasKey(keys)
Step hasKey(keys)
:properties包含keys列表中指定的任何一个key时通过
示例:
// 获取所有顶点的 properties中key为age或者name的属性
// 旧版本HugeGraph中只支持传入一个key
g.V().properties().hasKey('age', 'name')
当后端是Cassandra时支持直接将hasKey()
作用于顶点:
// 仅当后端是Cassandra时支持
g.V().hasKey('age')
hasValue(values)
Step hasValue(values)
:properties包含指定的values列表中任意一个值时通过
示例:
// 获取value为"Beijing"或者29的属性
g.V().properties().hasValue("Beijing", 29)
当后端是Cassandra时支持直接将hasValue()
作用于顶点:
// 仅当后端是Cassandra时支持
g.V().hasValue("Beijing")
has(key)
Step has(key)
:有这个属性时通过
示例:
// 获取所有带有age属性的顶点
g.V().has('age')
hasNot(key)
Step hasNot(key)
:没有这个属性的通过
示例:
// 获取所有不包含age属性的顶点
g.V().hasNot('age')
其他
has()
语句既可以用在Vertex,也可以用于Edge,用法完全一样。