1 has
检查vertex或edge的id、label或property value的值是否满足特定的条件进行查询,应该是最常用的查询了
1.1 语法
has(key,value)
has(label, key, value)
has(key,predicate)
hasLabel(labels…)
hasId(ids…)
hasKey(keys…)
hasValue(values…)
has(key)
hasNot(key)
has(key, traversal)
1.2 实例说明
过滤指定id的vertex或edge
# id为4160的vertex
gremlin> g.V().has(id, 4160)
==>v[4160]
gremlin> g.V().hasId(4160)
==>v[4160]
过滤指定label的vertex或edge
# label为Person的vertex
gremlin> g.V().has(label, 'Person')
==>v[4160]
==>v[4336]
gremlin> g.V().hasLabel('Person')
==>v[4160]
==>v[4336]
检查属性
gremlin> g.V().has('name', '张三')
==>v[4160]
has()可以同时包含label和property参数
# 第一个参数是label值
gremlin> g.V().has('Person','name', '张三')
==>v[4160]
has()的值可以是一个predicate表达式,支持更复杂的查询,比如:
# age值等于20,与has('age', 20)的效果相同
gremlin> g.V().has('age', eq(20))
==>v[4160]
gremlin> g.V().has('age', gt(10))
==>v[4160]
检查property key
# 存在名字为age的property的vertex
gremlin> g.V().has('age')
==>v[4160]
# 不存在名字为age的property的vertex
gremlin> g.V().hasNot('age')
==>v[4296]
==>v[4336]
# 名字为age的property
gremlin> g.V().properties().hasKey('age')
==>vp[age->20]
# 值为20的property
gremlin> g.V().properties().hasValue(20)
==>vp[age->20]
2 is
判断一个标量(如属性的值)是否满足特定条件
2.1 语法
is(Object)
is(P)
2.2 实例说明
age值等于20
gremlin> g.V(4160).values('age').is(20)
==>20
图库中有三个vertex
gremlin> g.V().count().is(3)
==>3
条件可以是一个predicate
gremlin> g.V(4160).values('age').is(gt(20))
==>20
3 where
where的参数可以是一个predicate,也可以是一个traversal。predicate的结果为true或者traversal的结果为非空,表示满足条件
3.1 语法
where(P)
where(String,P)
where(Traversal)
3.2 实例说明
查找名字叫 张三 的人,结果与g.V().has('name', '张三')
一样
gremlin> g.V().where(has('name', '张三'))
查找住在shenzhen的人
gremlin> g.V().where(out('living').has('name','shenzhen'))
可以与by()结合,比较两个对象的property值
查找被自己年龄小的人认识的人
gremlin> g.V().as('a').out('knows').as('b').where('a', lt('b')).by('age')
网友评论