在 cmets 中给出附加信息的示例图可能如下所示:
g = TinkerGraph.open().traversal()
g.addV('person').
property('name','daniel').
property('age',37).
property('state','AZ').
addV('person').
property('name','howell').
property('age',25).
property('state','WA').
addV('person').
property('name','john').
property('age',19).
property('state','NV').
addV('rule').
property('state','WA').
property('state','CA').
property('state','OR').
property('minimumAge',22).
addV('rule').
property('state','AZ').
property('state','FL').
property('state','TX').
property('minimumAge',19).
iterate()
我不太确定age > 22 是否是故意的,但我们假设您实际上只是在寻找相等匹配;那么您的查询将是:
g.V().hasLabel('people').as('person').
V().hasLabel('rule').
where(eq('person')).
by(values('age','state','registered').fold()).
addE('hasRule').
from('person')
要匹配person 和rule 顶点,您可以执行类似的操作(根据需要添加更多规则):
g.V().hasLabel('person').as('person').
V().hasLabel('rule').
where(lte('person')).by('minimumAge').by('age').
filter(values('state').where(eq('person')).by().by('state')).
addE('hasRule').
from('person').iterate()
此查询将在示例图中添加 2 条边(john 没有规则,因为他太年轻了):
gremlin> g.V().outE().inV().path().by('name').by(label).by(valueMap())
==>[daniel,hasRule,[minimumAge:[19],state:[AZ,FL,TX]]]
==>[howell,hasRule,[minimumAge:[22],state:[WA,CA,OR]]]